Starten Sie Ihren Interpreter / Ihre Konsole und versuchen Sie den Vergleich
> ",,," == Array(4)
True
Warum? Zuerst dachte ich vielleicht, da man sich ",,," als ein Array von vier Zeichen mit einem '\ 0'-terminierenden Slice vorstellen könnte, könnte das der Grund sein, aber
> "..." == Array(4)
Gibt "False" zurück. Warum also? Ich weiß, dass es ein eigenwilliges Stück Ente ist, das in Javascript tippt, aber nur neugierig, was dieses Verhalten unterstreicht. Dies ergab sich übrigens aus Zed Shaws ausgezeichneter Präsentation hier .
javascript
ZenLikeThat
quelle
quelle
===
statt zu verwenden==
.Antworten:
Weil der rechte Operand in eine Zeichenfolge konvertiert wird und die Zeichenfolgendarstellung von
Array(4)
lautet,,,
:Wenn Sie die Array-Konstruktorfunktion verwenden und eine Zahl übergeben, wird die Länge des Arrays auf diese Zahl festgelegt. Sie können also sagen, dass Sie vier leere Indizes haben (wie
[,,,]
), und die Standard-Zeichenfolgendarstellung von Arrays ist eine durch Kommas getrennte Liste ihrer Elemente:Wie der Vergleich funktioniert, ist in Abschnitt 11.9.3 der Spezifikation beschrieben . Dort sehen Sie (
x == y
):(Arrays sind Objekte in JavaScript)
und wenn Sie der
ToPrimitive
Methode folgen, werden Sie schließlich feststellen, dass sie aufgerufen wirdtoString
.quelle
Array.join(",")
.Intern geht es los
quelle
Versuchen Sie es mit
===
. Bei Verwendung==
in Javascript wird versucht, die Variablen umzuwandeln, was zu Problemen wie diesem führt. Die Konsole wandeltArray(4)
in die Zeichenfolgendarstellung (dhArray(4).toString
) um",,,"
. Der Grund, warum die Kommas vorhanden sind, besteht darin, dass die.toString()
Funktion sie zu separaten Elementen in einem Array hinzufügt.Siehe den folgenden Ausschnitt:
quelle
Dies liegt daran, dass
Array(4)
ein Array mit 4 leeren Werten initialisiert und==
implizit konvertiert wird.Sind alle ähnlich.
==
führt implizite Typkonvertierungen durch, bevor die Werte verglichen werden, was zu unvorhersehbaren Ergebnissen führen kann. Verwenden Sie===
diese Option , um den Typ und den Wert zu überprüfen.quelle
Durch Vergleichen eines Arrays mit einem String wird das Array vor dem Vergleich zu einem String gezwungen. Wenn Sie ein leeres Array mit 4 Elementen zu einer Zeichenfolge zwingen, erhalten Sie genau diese Zeichenfolge.
quelle
Ich dachte zuerst, es sei etwas mit dem "Prototyp" ... aber nach einer kleinen Untersuchung kam ich zu einem traurigen Ergebnis ...
Anscheinend ist es eine interne und dunkelere Sache mit wenig Logik ...
Probier's einfach
und auch kein Zwang auf Typen ...
und du wirst FALSCH bekommen
Sie wissen , dass
null==null
,null===null
und auchundefined==undefined
undundefined===undefined
gibt TRUE zurück ... so ... es ist ein bisschen verschleiern ...Array(4)==[,,,]
sollte auch wahr seinquelle