Heim > Web-Frontend > js-Tutorial > Warum verhält sich „instanceof' bei Literalen in JavaScript anders?

Warum verhält sich „instanceof' bei Literalen in JavaScript anders?

Susan Sarandon
Freigeben: 2024-11-03 14:45:03
Original
370 Leute haben es durchsucht

Why Does `instanceof` Behave Differently with Literals in JavaScript?

Inkonsistenzen von „instanceof“ mit Literalen

Der „Instanceof“-Operator von JavaScript weist trotz seines Zwecks, zu prüfen, ob ein Objekt eine Instanz einer Klasse ist, einige auf unerwartetes Verhalten mit Literalen. Dieser Artikel befasst sich mit diesen Inkonsistenzen und enthüllt die Gründe dafür.

Primitive Literale vs. Objektliterale

Primitive wie Zeichenfolgen, Zahlen und Boolesche Werte gibt es in eine eigene Typkategorie im Vergleich zu Objekten, die in JavaScript erstellt wurden. Diese Unterscheidung wird in den folgenden Beispielen veranschaulicht:

<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

Während Farbe1 eine von einem Konstruktor erstellte Instanz von String ist, ist Farbe2 ein primitives Zeichenfolgenliteral.

Falsch Gibt mit Instanz von zurück

Unerwarteterweise gibt „instanceof“ für viele den Wert „false“ zurück Literale:

<code class="js">"foo" instanceof String // false
true instanceof Boolean // false
12.21 instanceof Number // false</code>
Nach dem Login kopieren

Diese Grundelemente gelten nicht als Instanzen ihrer jeweiligen Wrapper-Objekte.

Ausnahmen bei Arrays und Objekten

Array- und Objektliterale Ausnahmen von der Regel sind:

<code class="js">[0,1] instanceof Array // true
{0:1} instanceof Object // true</code>
Nach dem Login kopieren

Sie werden als Instanzen des entsprechenden Konstruktors behandelt Funktionen.

Gründe für die Inkonsistenzen

Das unterschiedliche Verhalten ist beabsichtigt. JavaScript betrachtet Grundelemente als unveränderliche Werte und nicht als Objekte. Daher erben sie von keiner Klasse. Die Ausnahmen für Array- und Objektliterale werden gemacht, um die Objektmanipulation zu vereinfachen und die Konsistenz mit den Konstruktorfunktionen aufrechtzuerhalten.

Fazit

Primitive Literale und Objekte, die in JavaScript erstellt wurden, unterscheiden sich in ihren Eigenschaften Verhalten mit dem Instanzoperator. Diese Unterscheidung kann je nach konkretem Anwendungsfall sowohl kontraintuitiv als auch praktisch sein. Durch das Verständnis dieses differenzierten Verhaltens können Entwickler „instanceof“ effektiv in ihrem JavaScript-Code nutzen.

Das obige ist der detaillierte Inhalt vonWarum verhält sich „instanceof' bei Literalen in JavaScript anders?. 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