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