2009-03-24 5 views
-1

Es gibt ein paar Möglichkeiten, dies in Javascript zu tun.Der ternäre Operator und wenn A, B, sonst C. Gibt es wichtige Unterschiede?

Foremost und am besten lesen und flexibel ist wahrscheinlich:

if (a){ 
    //b 
} 
else { 
    //c 
} 

Etwas anderes, das nur * arbeitet mit Zuordnung und ist weniger lesbar ist:

var foo = 'c'; 
if (a){ 
    foo = 'b'; 
} 

Meine Hauptfrage aber, über die ist die letzten beiden Methoden, die ich mir vorstellen kann:

var foo = a ? b : c; 

var foo = a && b || c; 

Gibt es irgendwelche Unterschiede zwischen uns de diese beiden Ausdrücke? Anders als die Lesbarkeit, die beide fehlen.

* obwohl Sie könnte foo zuweisen, um eine Funktion zu sein, dann führen Sie es nach der if-Anweisung aus.

+0

Um pedantisch zu sein: Sie diskutieren technisch den bedingten Operator, der gerade ein ternärer Operator ist (das ist ein Operator, der auf drei Elementen operiert). –

+0

Für kurze Anweisungen kann der bedingte Operator _more_ "lesbarer" sein als jedes vollwertige if-Konstrukt. – Svante

Antwort

8

Angenommen:

var a = false, b = '', c = 'bar'; 

Dann:

var foo = a ? b : c; // foo == '' 
var foo = a && b || c; // foo == 'bar' 

Die beiden sind nicht gleichwertig sind; Sie sollten niemals die booleschen Operatoren anstelle des Bedingungsoperators verwenden. Wie andere Beantworter bin auch ich der Meinung, dass dem Bedingungsoperator die Lesbarkeit für einfache Ausdrücke nicht fehlt.

+0

Ich vermute, das ist es, worauf Sascha hinwies, aber du hast es viel klarer gemacht. Vielen Dank :) – Annan

1

Sie bewerten nicht zum selben Ergebnis, da letzterer ein boolescher Ausdruck ist und keinen ternären Operator verwendet.

+0

Wenn ich den folgenden Code in Firefox ausführen, sagt es 2 und nicht wahr, wie Sie vorschlagen: "alert (1 && 2 || 3)" – Annan

+0

a == wahr b == falsch c == falsch -> falsch und wahr && false = falsch a == true b == true c == false -> (true und true) oder falsch = true a == false b == true c = true -> (false und wahre (= false)) oder true = true – Sascha

5

Der ternäre Operator ist für mich sicher lesbar. Noch mehr als das erste Beispiel, denn prägnanter, logischer Code ist immer leichter zu verstehen als viele Zeilen von Steuercode, die dasselbe tun.

3

Ich stimme der ersten Lesbarkeit nicht zu, solange es richtig verwendet wird, IOW a, b und c sind einfache Ausdrücke selbst. Dieser Operator wird jedoch unter Umständen missbraucht, die er nicht haben sollte.

In ähnlicher Weise wäre der zweite Ausdruck, der das Ergebnis foo als alles andere als einen booleschen Wert verwendet, nicht gut. Verwenden Sie die booleschen Operatoren, um nicht boolesche Werte zurückzugeben, da dies die Art ist, wie sie funktionieren, ist nur verwirrend. Als boolescher Ausdruck ist es jedoch sinnvoll.

Verwandte Themen