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>
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>
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>
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!