Enthüllung der rätselhaften Natur leerer Arrays in JavaScript
Leere Arrays in JavaScript weisen eine besondere Dualität auf und scheinen gleichzeitig wahr und falsch zu sein. Dieses verwirrende Verhalten ist auf die implizite Konvertierung zurückzuführen, die von Gleichheitsoperatoren durchgeführt wird. Um tiefer in die zugrunde liegenden Mechanismen einzutauchen, schauen wir uns das folgende Code-Snippet an:
<br>var arr = [];<br>console.log('Array:', arr);<br>if (arr) console.log("Es ist wahr!");<br>if (arr == false) console.log("Es ist falsch!");<br>if (arr && arr == false) console .log("...was??");<br>
Die erste if-Anweisung überprüft die Anwesenheit des arr-Objekts (Array ist eine Instanz von Object) und gibt true zurück. Allerdings vergleicht die if-Anweisung mit arr == false den Wert des arr-Objekts mit dem primitiven Wert von false. Um diesen Vergleich durchzuführen, wird arr.toString() implizit aufgerufen und gibt einen leeren String „“ zurück.
Dieses Ergebnis wird durch das Verhalten von Array.join() erklärt. Wenn toString() für ein Array aufgerufen wird, gibt es das verkettete Ergebnis des Aufrufs von join() für dieses Array zurück. Da das Array leer ist, ist das Ergebnis ein leerer String, der in JavaScript in die Kategorie der falschen Werte fällt. Daher wird arr.toString() als falsch ausgewertet, was dazu führt, dass if (arr == false) true zurückgibt.
Der besondere Fall von if (arr && arr == false) unterstreicht die Operation des logischen UND ( &&)-Operator. Damit die gesamte Aussage wahr ist, müssen beide Bedingungen wahrheitsgemäße Werte ergeben. arr allein ist wahr, aber arr == false wird aufgrund der oben genannten impliziten Konvertierung als wahr ausgewertet. Daher wird die Konjunktion als wahr ausgewertet, was zu dem scheinbar widersprüchlichen „Es ist falsch!“ führt. Ausgabe.
Das obige ist der detaillierte Inhalt vonWarum erscheint ein leeres Array in JavaScript sowohl wahr als auch falsch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!