Instanceof-Rätsel: Warum einige Literale nicht übereinstimmen
Obwohl der Instanzof-Operator für JavaScript von grundlegender Bedeutung ist, kann er bei Verwendung mit bestimmten Wörtern ein rätselhaftes Verhalten zeigen Literale. Insbesondere werden Zeichenfolgen-, Boolesche- und Zahlenliterale alle als „falsch“ ausgewertet, wenn sie mit ihren jeweiligen Konstruktoren getestet werden.
<code class="js">"foo" instanceof String //=> false "foo" instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false false instanceof Boolean //=> false false instanceof Object //=> false 12.21 instanceof Number //=> false /foo/ instanceof RegExp //=> true</code>
Dieses Verhalten ist überraschend, da man erwarten würde, dass Literale Instanzen ihrer entsprechenden Typen sind. Der Grund für ihre Inkonsistenz liegt jedoch in der Unterscheidung zwischen Grundelementen und Objekten.
Primitivismus im Spiel
JavaScript-Grundelemente wie Zeichenfolgen, Zahlen und Boolesche Werte sind es integrierte Typen, die nicht durch Objektkonstruktoren erstellt werden. Stattdessen unterscheiden sie sich grundlegend von Objekten, die in JavaScript erstellt wurden.
<code class="js">var color1 = new String("green"); color1 instanceof String; // returns true var color2 = "coral"; color2 instanceof String; // returns false (color2 is not a String object)</code>
Wie oben gezeigt, erstellt die Verwendung des String-Konstruktors ein String-Objekt, das beim Testen mit „instanceof“ als „true“ ausgewertet wird. Das primitive String-Literal „Coral“ erbt dieses Verhalten jedoch nicht.
Alternative Methoden zur Typprüfung
Das rätselhafte Verhalten von „instanceof“ mit Primitiven hat zur Einführung geführt von alternativen Methoden zur Typprüfung:
Zusammenfassend lässt sich sagen, dass das Verhalten von „instanceof“ mit Grundelementen ein Ergebnis des einzigartigen Typsystems von JavaScript ist. Dies kann zwar zu Verwirrung führen, aber das Verständnis der Unterscheidung zwischen Grundelementen und Objekten kann Entwicklern dabei helfen, effektiv mit diesen Nuancen umzugehen.
Das obige ist der detaillierte Inhalt vonWarum bestehen String-, Boolesche- und Zahlenliterale den „instanceof'-Test nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!