Junior
Co kontroluje operátor instanceof v JavaScriptu?
sobes.tech AI
Odpověď od AI
Operátor instanceof v JavaScriptu kontroluje, zda je objekt instance určité třídy nebo konstruktoru.
Princip fungování:
- Operátor
instanceofkontroluje, zda jeprototypekonstruktoru přítomen v řetězci prototypů objektu. - Pokud je
prototypekonstruktoru v řetězci, výsledek jetrue. - Jinak je výsledek
false.
Příklady:
// Vytvoření třídy
class Animal {
// Konstruktor
constructor(name) {
this.name = name;
}
}
// Vytvoření instance třídy
let dog = new Animal("Buddy");
// Kontrola, zda je dog instance třídy Animal
console.log(dog instanceof Animal); // true
// Kontrola, zda je dog instance třídy Object (je, přes řetězec prototypů)
console.log(dog instanceof Object); // true
// Kontrola, zda je dog instance pole (není)
console.log(dog instanceof Array); // false
// Kontrola s vestavěnými typy
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 (u primitivních typů se `instanceof` chová specificky)
// U primitivních typů vytvořených pomocí new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true
Vlastnosti:
instanceoffunguje přes řetězec prototypů, takže výsledek může býttruei pro rodičovské konstruktory.- U primitivních typů (string, number, boolean, null, undefined, symbol, bigint)
instanceofobvykle vracífalse, pokud nebyly vytvořeny pomocí odpovídajícího obalového objektu (new String(),new Number(), atd.). - Může být nepřesný při práci s různými kontexty vykonávání JavaScriptu (například s různými okny nebo iframe), protože každý kontext má své vlastní konstruktory.
Podobné přístupy pro kontrolu typu:
typeof: vrací řetězec označující základní typ dat (string, number, boolean, object, function, undefined, symbol, bigint). Není vhodný pro kontrolu příslušnosti ke konkrétní třídě.Object.prototype.toString.call(): vrací přesnější řetězec s typem objektu ("[object Array]","[object Date]", atd.).
Obecně je instanceof užitečný pro kontrolu, zda objekt patří do určité třídy nebo jejího předka v hierarchii dědičnosti.