Sobes.tech
Junior

Was überprüft der Operator instanceof in JavaScript?

sobes.tech KI

Antwort von AI

Der Operator instanceof in JavaScript überprüft, ob ein Objekt eine Instanz einer bestimmten Klasse oder eines bestimmten Konstruktors ist.

Funktionsprinzip:

  1. Der Operator instanceof prüft, ob prototype des Konstruktors in der Prototyp-Kette des Objekts vorhanden ist.
  2. Wenn prototype des Konstruktors in der Kette vorhanden ist, ist das Ergebnis true.
  3. Andernfalls ist das Ergebnis false.

Beispiele:

// Klasse erstellen
class Animal {
  // Konstruktor
  constructor(name) {
    this.name = name;
  }
}

// Instanz der Klasse erstellen
let dog = new Animal("Buddy");

// Überprüfen, ob dog eine Instanz von Animal ist
console.log(dog instanceof Animal); // true

// Überprüfen, ob dog eine Instanz von Object ist (ist es, durch die Prototyp-Kette)
console.log(dog instanceof Object); // true

// Überprüfen, ob dog eine Instanz von Array ist (ist es nicht)
console.log(dog instanceof Array); // false

// Überprüfung mit eingebauten Typen
let arr = [1, 2, 3];
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true

let num = 123;
console.log(num instanceof Number); // false (bei Primitiven verhält sich instanceof spezifisch)
// Für Primitiven, die mit new erstellt wurden
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Eigenschaften:

  • instanceof arbeitet durch die Prototyp-Kette, daher kann das Ergebnis true für Eltern-Konstruktoren sein.
  • Für primitive Typen (string, number, boolean, null, undefined, symbol, bigint) gibt instanceof in der Regel false zurück, wenn sie nicht durch das entsprechende Wrapper-Objekt (new String(), new Number(), etc.) erstellt wurden.
  • Es kann ungenau sein, wenn mit verschiedenen JavaScript-Ausführungskontexten gearbeitet wird (z.B. verschiedene Browser-Fenster oder iframe), da jeder Kontext seine eigenen Konstruktoren hat.

Ähnliche Ansätze zur Typüberprüfung:

  • typeof: Gibt eine Zeichenkette zurück, die den Basistyp angibt (string, number, boolean, object, function, undefined, symbol, bigint). Nicht geeignet, um die Zugehörigkeit zu einer bestimmten Klasse zu prüfen.
  • Object.prototype.toString.call(): Gibt eine genauere Zeichenkette mit dem Objekttyp zurück ("[object Array]", "[object Date]", etc.).

Insgesamt ist instanceof nützlich, um die Zugehörigkeit eines Objekts zu einer bestimmten Klasse oder deren Vorfahren in der Vererbungshierarchie zu überprüfen.