Heim > Web-Frontend > js-Tutorial > Warum bestehen String-, Boolesche- und Zahlenliterale den „instanceof'-Test nicht?

Warum bestehen String-, Boolesche- und Zahlenliterale den „instanceof'-Test nicht?

Patricia Arquette
Freigeben: 2024-10-31 21:51:02
Original
641 Leute haben es durchsucht

Why Do String, Boolean, and Number Literals Fail the `instanceof` Test?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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:

  • typeof-Operator: Der typeof-Operator gibt den primitiven Typ einer Variablen zurück, z. B. typeof „foo“ === „string“.
  • Object.prototype.toString: Diese Methode kann auch zur Typprüfung verwendet werden, z. B. Object.prototype.toString.call("foo") === "[object String ]".

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage