Sobes.tech
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:

  1. A instanceof ellenőrzi, hogy a konstruktor prototype-ja megtalálható-e az objektum prototípus láncában.
  2. Ha a prototype megtalálható a láncban, az eredmény true.
  3. 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 instanceof a prototípus láncon keresztül működik, így eredmény lehet true a szülő konstruktorokra is.
  • Primitív típusok (string, number, boolean, null, undefined, symbol, bigint) esetén az instanceof általában false, 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.