2012-03-25 13 views
35

Ich frage mich, ob es ein kürzerer Weg, dies zu schreiben:Stenografie if/else-Anweisung Javascript

var x = 1; 
if(y != undefined) x = y; 

Ich versuchte zunächst x = y || 1, aber das hat nicht funktioniert. Was ist der richtige Weg?

+0

'x = y || X 'funktioniert, wenn Sie kümmern sich um strenge ** undefined ** – Nemesarial

Antwort

73
var x = y !== undefined ? y : 1; 

Beachten Sie, dass var x = y || 1;1 für jeden Fall zuweisen würde, wo y falsy (z false, 0, ""), die sein kann, warum es für Sie „nicht funktioniert“. Auch wenn y eine globale Variable ist, wenn es wirklich nicht definiert Sie können in einen Fehler ausgeführt werden, wenn Sie es als window.y zugreifen.


Wie vol7ron in den Kommentaren schon sagt, können Sie auch typeof verwenden, um die Notwendigkeit zu vermeiden, zu globalen Variablen wie window.<name> zu verweisen:

var x = typeof y != "undefined" ? y : 1; 
+0

Yay nicht für ternäre Operatoren. Ich werde das ausprobieren. Edit: Ah, okay. Was ist mit "undefiniert"? Ich habe das nicht verstanden. –

+0

Was meinst du? Die Zeichenkette ''undefined'' ist ein wahrer Wert und ist nicht gleich dem tatsächlichen' undefinierten' Wert. – Amber

+0

Ich meinte, wo die Variable überhaupt nicht deklariert wurde. Ich weiß, dass die Zeichenfolge 'undefined' zu einem booleschen Wert führt, aber das ist nicht das, wonach ich gesucht habe. –

3
y = (y != undefined) ? y : x; 

Die Klammern sind nicht notwendig, ich nur hinzufügen sie, weil ich denke, dass es einfacher ist, so zu lesen.

typeof y !== 'undefined' && y || 1

Obwohl ich noch ternär lesbar denke ...

+3

Ihre Parens sind unausgewogen (und auch unnötig). – Amber

+0

@Amber In dem Moment, in dem Sie anfangen, javscript-Kurzschrift zu verwenden, sagen Sie bereits, dass Sie sich nicht um die Lesbarkeit kümmern, also warum sollten Sie sich mit ausgewogenen Parens beschäftigen ?. –

13

Ein anderer Weg, um es kurz

bePlanVar = !!((bePlanVar == false)); 

// is equivalent to 

bePlanVar = (bePlanVar == false) ? true : false; 

// and 

if (bePlanVar == false) { 
    bePlanVar = true; 
} else { 
    bePlanVar = false; 
} 
1

andere Art und Weise als ternäres, mit Kurzschluss zu schreiben hier ist eine Möglichkeit, es zu tun, das funktioniert, kann aber nicht beste Praxis für jede Sprache sein wirklich:

var x,y; 
x='something'; 
y=1; 
undefined === y || (x = y); 

alternativ

undefined !== y && (x = y); 
0

:

+0

Gerade bemerkt, dass dies bereits von @AndreFigueiredo geliefert wurde – Nemesarial