2010-12-03 11 views
4

Ich habe Code wie folgt auf dem Netz gesehen:Wie korrekt ist es zu verwenden || als "ifnull" in JavaScript?

function MyEventHandler(e) 
{ 
    var ev = e || event; 
    var target = ev.srcElement || ev.target 
} 

Im Wesentlichen der || Operator als Abkürzung für a?a:b verwendet wird. Soweit ich das beurteilen kann - es funktioniert auf allen Browsern. Aber bringt Spezifikationen für, sagen wir, JScript, I see:

Führt eine logische Disjunktion für zwei Ausdrücke.

und

JScript verwendet die folgenden Regeln für die Umwandlung von nicht-Boolesche Werte Boolesche Werte:

  • Alle Objekte wahr angesehen werden.

So ... nach diesem das Ergebnis sollte ein boolean wahr/falsch sein. Ich wundere mich nur - gehe ich die Messerschneide von undokumentiertem Verhalten, oder gibt es eine feine Implikation hier, die ich nicht aufgenommen habe?

Antwort

4

Dieses Verhalten ist recht gut dokumentiert. Siehe Kapitel 11.11 der ECMAScript-Spezifikation: http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

Leider ist es nicht sehr einfach zu verstehen, aber die letzte Absatz heißt es:

Der Wert von einem & erzeugt & oder || Operator ist nicht notwendigerweise vom Typ Boolean. Der erzeugte Wert ist immer der Wert eines der beiden Operandenausdrücke .

+0

Danke! Das ist die Antwort, nach der ich gesucht habe! :) –

4

Nein, ich denke, Sie verstehen das Koaleszenzverhalten von || ganz gut.

EDIT:

&& ist auch Koaleszenzmittel. a && b verhält sich wie a ? b : a.

+0

Wo ist das dokumentiert? Warum konvertiert man zuerst 'a' und' b' in booleans? –

+0

Es wird nicht konvertiert, sondern die Variable als Ausdruck ausgewertet. Wenn die Variable null oder nicht definiert ist, wird sie falsch. Der Operator gibt immer den Wert der Variablen anstelle des Ausdrucks zurück. – airmanx86

1

Es ist nur eine Ungenauigkeit in JScript-Spezifikationen. JScript ist eine Implementierung des ECMAScript-Standards, daher sollten Sie für den tatsächlichen Stand der Dinge die ECMAScript-Spezifikation betrachten.

Verwandte Themen