Heim >Web-Frontend >js-Tutorial >Warum verhält sich „instanceof' für Grundelemente in JavaScript anders?

Warum verhält sich „instanceof' für Grundelemente in JavaScript anders?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-02 12:00:05425Durchsuche

Why Does `instanceof` Behave Differently for Primitives in JavaScript?

Instanzen und Primitive in JavaScript: Instanzof-Anomalien verstehen

Der Instanzof-Operator von JavaScript gibt „true“ zurück, wenn ein Objekt von einer bestimmten Klasse erbt. Bestimmte Literale wie Zeichenfolgen und Zahlen scheinen dieser Regel jedoch zu widersprechen und geben beispielsweise bei Vergleichen „false“ zurück. Warum ist das so?

Primitive vs. Objekte

Der Schlüssel zum Verständnis dieser Anomalien liegt in der Unterscheidung zwischen Primitiven und Objekten. Primitive, zu denen Zeichenfolgen, Zahlen, Nullwerte, undefinierte Werte und boolesche Werte gehören, werden nicht mithilfe von Konstruktoren erstellt. Umgekehrt werden Objekte mithilfe von Konstruktoren oder Objektliteralen wie new String("foo") oder {} erstellt.

instanceof Behavior for Primitives

Für Primitive Der Instanzoperator gibt für alle Klassen „false“ zurück. Dies liegt daran, dass Primitive keine Instanzen einer Klasse sind und nicht von einem Prototyp erben. Zum Beispiel:

<code class="js">"foo" instanceof String // false
123 instanceof Number // false</code>

Ausnahmen: RegExp und Arrays

RegExp-Literale sind, obwohl sie primitiv sind, eine Ausnahme von dieser Regel. Sie geben zum Beispiel „true“ von RegExp zurück. In ähnlicher Weise geben Array-Literale „true“ für „instanceof“-Array zurück.

instanceof mit Null und Undefiniert

Null und undefiniert sind eindeutige Grundelemente, die ein besonderes Verhalten mit „instanceof“ haben. Sie geben für alle Klassen, einschließlich Object, false zurück. Dies liegt daran, dass es sich technisch gesehen nicht um Objekte handelt, sondern über eigene, eindeutige Datentypen.

Konsequenzen

Die Inkonsistenzen im Verhalten von Instanzen können verwirrend sein und zu unerwarteten Ereignissen führen Ergebnisse. Um solche Probleme zu vermeiden, wird im Allgemeinen empfohlen, Typprüfungen anstelle von Instanzprüfungen zu verwenden, um den Typ einer Variablen zu bestimmen. Zum Beispiel:

<code class="js">var foo = "string";
typeof foo === "string" // true</code>

Das obige ist der detaillierte Inhalt vonWarum verhält sich „instanceof' für Grundelemente in JavaScript anders?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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