Heim  >  Artikel  >  Web-Frontend  >  Warum gibt „instanceof“ „false“ für Literale in JavaScript zurück?

Warum gibt „instanceof“ „false“ für Literale in JavaScript zurück?

DDD
DDDOriginal
2024-11-03 22:39:31771Durchsuche

Why Does `instanceof` Return `false` for Literals in JavaScript?

Das Geheimnis von Instanceof und Literalen

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:

  • Literale wie Strings, Zahlen und boolesche Werte sind Grundelemente. Sie existieren unabhängig von einer Klasse oder Instanz.
  • Objekte wie Arrays und Objekte, die mit dem Schlüsselwort new erstellt wurden, sind Instanzen von Klassen.

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!

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