Junior
Ką tikrina instanceof operatorius JavaScript?
sobes.tech AI
Atsakymas iš AI
JavaScript instanceof operatorius tikrina, ar objektas yra tam tikros klasės arba konstruktoriaus instancija.
Veikimo principas:
instanceoftikrina, ar konstruktoriausprototypeyra objekto prototipo grandinėje.- Jei
prototypeyra grandinėje, rezultatas yratrue. - Jei nėra, rezultatas yra
false.
Pavyzdžiai:
// Sukuriame klasę
class Animal {
// Konstruktorius
constructor(name) {
this.name = name;
}
}
// Sukuriame klasės instanciją
let dog = new Animal("Buddy");
// Tikriname, ar dog yra `Animal` instancija
console.log(dog instanceof Animal); // true
// Tikriname, ar dog yra `Object` instancija (per grandinę)
console.log(dog instanceof Object); // true
// Tikriname, ar dog yra `Array` instancija (ne)
console.log(dog instanceof Array); // false
// Patikrinimas su įmontuotais tipais
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 (priemityviniai tipai)
// Sukurtas su new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true
Ypatybės:
instanceofveikia per prototipo grandinę, todėl rezultatas gali būtitrueir tėvų konstruktoriams.- Priemityvūs tipai (string, number, boolean, null, undefined, symbol, bigint) dažnai grąžina
false, jei jie nesukuriami per atitinkamą objektą (new String(),new Number()ir t.t.). - Gali būti netikslus dirbant su skirtingais JavaScript vykdymo kontekstais (pvz., skirtingose naršyklės langų ar iframe kontekstuose), nes kiekvienas kontekstas turi savo konstruktorius.
Kiti tipų patikrinimo būdai:
typeof: grąžina eilutę, nurodančią pagrindinį duomenų tipą (string,number,boolean,object,function,undefined,symbol,bigint). Nerekomenduojama naudoti konkrečiam klasei priklausomybės patikrinimui.Object.prototype.toString.call(): grąžina tikslesnį tipą nurodantį eilutę ("[object Array]","[object Date]"ir t.t.).
Apskritai, instanceof yra naudingas tikrinant, ar objektas priklauso konkrečiai klasei ar jos paveldėjimo grandinei.