Die logischen Operatoren in JavaScript bewerten tatsächlich eines der beiden Objekte. Wenn Sie a || b
verwenden, wird b
ausgewertet, wenn a
falsch ist, oder a
, wenn a
wahr ist. Daher ist a || []
a
, wenn a
ein Wert ist, der wahr ist, oder []
, wenn a
ein Wert ist, der falsch ist.
Es ist viel offensichtlicher, if (!a) { a = [] };
Es sieht im Grunde aus, ob eine Variable var1
bereits existiert und "truthy" ist. Wenn dies der Fall ist, weist es der lokalen var1
-Variable ihren Wert zu; Wenn nicht, wird ihm ein leeres Array zugewiesen.
Das funktioniert, weil der JavaScript-Operator ||
den Wert des ersten truthy-Operanden zurückgibt, oder den letzten, wenn keiner truthig ist. var1 || var2
gibt var1
zurück, wenn es truthy ist, oder var2
, sonst.
Hier sind einige Beispiele:
%Vor% Werte, die nicht "truthy" sind: false
, 0
, undefined
, null
, ""
(leere Zeichenfolge) und NaN
. Leere Arrays und Objekte gelten in JavaScript als truthy, anders als in einigen anderen Sprachen.
Javascript oder (||) funktioniert ein bisschen anders als einige andere Sprachen, es gibt den ersten "truthy" -Wert statt eines booleschen Wertes zurück. Dies wird in diesem Fall verwendet, um zu sagen "Setze den Wert von var1 auf var1
, aber wenn dieser Wert" falsey "ist, setze ihn auf []
".
Dies wird oft verwendet, um einen "Standard" -Wert für eine Variable festzulegen, die bereits gesetzt sein kann oder nicht, wie zum Beispiel ein Argument für eine Funktion.
Der Operator ||
wertet den ersten seiner Operanden aus, der "truthy" ist.
[]
ist ein leeres Array. ( [ "Hi!" ]
ist ein Array mit einer Zeichenfolge)
Daher wird der Ausdruck x || []
zu x
ausgewertet, wenn es "truthy" ist, oder ein leeres Array, wenn dies nicht der Fall ist.
Dadurch kann der Parameter var1
optional sein.
Die Anweisung weist var1 ein leeres Array zu.
längere Antwort und Erklärung:
Dies passiert, weil var1 zu diesem Zeitpunkt nicht initialisiert ist. Nicht initialisiert ist ein falscher Wert.
nimm diese Aussage:
%Vor% Wenn var1 nicht initialisiert wird, wird es zu einem leeren Array, wenn es ein leeres Array ist passiert nichts, da es einem leeren Array zugewiesen ist, wenn var1 false
, null
oder irgendein anderer Wert, dass JavaScript Dinge wie falsch , es wird ein leeres Array, wenn var1 ist alles andere Wert, nichts passiert, da es sich selbst zugewiesen ist. (danke pst für den Link).
Kurz gesagt, es ist eine dumme Aussage, die weder lesbar noch nützlich ist, aber Sie sind schlau, wenn Sie wissen wollen, was es bedeutet. :)
Während dies als "eine dumme Aussage" herausgestellt wurde, präsentiere ich die folgenden zwei Zähler:
(Nur um die Leute auf Trab zu halten und einige der "feineren Details" von JavaScript zu verstärken.)
1)
var
ist die Variable ist bereits local
. ZB
2)
var
ist eine funktionsweite Annotation (sie wird nach oben gehisst) und keine Deklaration am Ort der Verwendung.
Ich mag keinen Code wie der vorhergehende, aber ...
Wegen des Hochziehens und erlaubter Re-Deklarationen hat der Code im Post diese Semantik:
%Vor%Bearbeiten Ich bin mir nicht bewusst, wie "strenger Modus" in Ed.5 das obige beeinflusst.
Tags und Links javascript