Heim > Artikel > Web-Frontend > Warum gibt „instanceof“ „false“ für Literale in JavaScript zurück?
Warum gibt der Instanceof-Operator für einige Literale false zurück?
In JavaScript Der Instanzoperator prüft, ob ein Objekt eine Instanz einer bestimmten Klasse oder Klassenhierarchie ist. Es verhält sich jedoch unerwartet, wenn es auf bestimmte Literale angewendet wird.
Literale wie Zeichenfolgen, Zahlen und boolesche Werte werden direkt im Code definiert und nicht über Klassen erstellt. Schauen wir uns die folgenden Beispiele an:
"foo" instanceof String //=> false "foo" instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false 12.21 instanceof Number //=> false // Array and Object literals are exceptions [0,1] instanceof Array //=> true {0:1} instanceof Object //=> true
Die Unterscheidung verstehen
Primitive vs. Objekte:
Instanzen von und Primitiven
Der Instanzoperator prüft nur, ob ein Objekt eine Instanz einer Klasse oder ihrer Nachkommen ist. Da Primitive nicht durch Klassen erstellt werden, gibt „instanceof“ für primitive Literale immer „false“ zurück, auch wenn der Wert des Literals mit dem Klassentyp übereinstimmt.
Ausnahmen: Array und Objekt
Ausnahmen von diesem Verhalten sind Array- und Objektliterale. Sie werden nicht durch Klassen erstellt, gelten aber dennoch als Instanzen der Array- bzw. Object-Klassen. Dies ist wahrscheinlich eine historische Eigenart der Sprache.
Alternative Testmethode
Um zu testen, ob ein Wert von einem bestimmten primitiven Typ ist, sollte man stattdessen den Operator „typeof“ verwenden of instanceof:
typeof "foo" === "string" //=> true typeof 12.21 === "number" //=> true
Fazit
Instanceof verhält sich schlecht mit primitiven Literalen, da es sich nicht um Instanzen einer Klasse handelt. Aufgrund einer historischen Eigenart bilden Array- und Objektliterale Ausnahmen. Bei der Bestimmung des Typs eines Primitivs empfiehlt es sich, typeof anstelle von instanceof zu verwenden.
Das obige ist der detaillierte Inhalt vonWarum gibt „instanceof“ „false“ für Literale in JavaScript zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!