Junior
Čo kontroluje operátor instanceof v JavaScriptu?
sobes.tech AI
Odpoveď od AI
Operátor instanceof v JavaScripte kontroluje, či je objekt inštanciou určitej triedy alebo konštruktora.
Princíp fungovania:
- Operátor
instanceofkontroluje prítomnosťprototypekonštruktora v reťazci prototypov objektu. - Ak je
prototypekonštruktora prítomný v reťazci, výsledok jetrue. - Inak je výsledok
false.
Príklady:
// Vytvoríme triedu
class Animal {
// Konštruktor
constructor(name) {
this.name = name;
}
}
// Vytvoríme inštanciu triedy
let dog = new Animal("Buddy");
// Kontrolujeme, či je dog inštanciou Animal
console.log(dog instanceof Animal); // true
// Kontrolujeme, či je dog inštanciou Object (je, cez reťazec prototypov)
console.log(dog instanceof Object); // true
// Kontrolujeme, či je dog inštanciou Array (nie je)
console.log(dog instanceof Array); // false
// Kontrola s vestavěnými typmi
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 (pre primityvy instanceof správa špecificky)
// Pre primityvy vytvorené cez new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true
Špeciálne vlastnosti:
instanceoffunguje cez reťazec prototypov, takže výsledok môže byťtrueaj pre rodičovské konštruktory.- Pre primityvy typy (string, number, boolean, null, undefined, symbol, bigint),
instanceofzvyčajne vraciafalse, ak neboli vytvorené cez príslušný obalový objekt (new String(),new Number()a pod.). - Môže byť nepresný pri práci s rôznymi kontextmi vykonávania JavaScriptu (napríklad s rôznymi oknami prehliadača alebo iframe), pretože každý kontext má vlastné konštruktory.
Podobné prístupy na kontrolu typu:
typeof: Vráti reťazec označujúci základný dátový typ (string, number, boolean, object, function, undefined, symbol, bigint). Nie je vhodný na kontrolu príslušnosti ku konkrétnej triede.Object.prototype.toString.call(): Vráti presnejší reťazec s typom objektu ("[object Array]","[object Date]"a pod.).
Celkovo je instanceof užitočný na kontrolu, či je objekt priradený ku konkrétnej triede alebo jej predkovi v dedičskej hierarchii.