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:
- Der Operator
instanceofprüft, obprototypedes Konstruktors in der Prototyp-Kette des Objekts vorhanden ist. - Wenn
prototypedes Konstruktors in der Kette vorhanden ist, ist das Ergebnistrue. - 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:
instanceofarbeitet durch die Prototyp-Kette, daher kann das Ergebnistruefür Eltern-Konstruktoren sein.- Für primitive Typen (string, number, boolean, null, undefined, symbol, bigint) gibt
instanceofin der Regelfalsezurü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.