Junior
Mit ellenőriz az instanceof operátor JavaScriptben?
sobes.tech MI
Válasz az MI-től
A instanceof operátor JavaScriptben ellenőrzi, hogy egy objektum egy adott osztály vagy konstruktor példánya-e.
Működési elv:
- A
instanceofellenőrzi, hogy a konstruktorprototype-ja megtalálható-e az objektum prototípus láncában. - Ha a
prototypemegtalálható a láncban, az eredménytrue. - Ellenkező esetben
false.
Példák:
// Osztály létrehozása
class Animal {
// Konstruktor
constructor(name) {
this.name = name;
}
}
// Osztály példányának létrehozása
let dog = new Animal("Buddy");
// Ellenőrzés, hogy a dog az Animal példánya-e
console.log(dog instanceof Animal); // true
// Ellenőrzés, hogy a dog az Object példánya-e (az, a prototípus láncon keresztül)
console.log(dog instanceof Object); // true
// Ellenőrzés, hogy a dog az Array példánya-e (nem az)
console.log(dog instanceof Array); // false
// Beépített típusok ellenőrzése
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 (primitív típusok esetén az `instanceof` speciális módon viselkedik)
// Primitív típusok, amiket new-val hoztak létre
let numObj = new Number(123);
console.log(numObj instanceof Number); // true
Jellemzők:
- Az
instanceofa prototípus láncon keresztül működik, így eredmény lehettruea szülő konstruktorokra is. - Primitív típusok (string, number, boolean, null, undefined, symbol, bigint) esetén az
instanceofáltalábanfalse, ha nem a megfelelő wrapper objektummal lettek létrehozva (new String(),new Number(), stb.). - Pontatlan lehet különböző JavaScript végrehajtási környezetekben (pl. külön ablakok vagy iframe-ek), mivel minden környezet saját konstruktorokat tartalmaz.
Hasonló módszerek típus ellenőrzésére:
typeof: egy stringet ad vissza, ami a primitív típusokat jelzi (string, number, boolean, object, function, undefined, symbol, bigint). Nem alkalmas osztályhoz való tartozás ellenőrzésére.Object.prototype.toString.call(): pontosabb típus stringet ad vissza ("[object Array]","[object Date]", stb.).
Általánosságban az instanceof hasznos az objektum osztályhoz vagy annak őséhez való tartozásának ellenőrzésére a öröklődési hierarchiában.