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

  1. instanceof tikrina, ar konstruktoriaus prototype yra objekto prototipo grandinėje.
  2. Jei prototype yra grandinėje, rezultatas yra true.
  3. 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:

  • instanceof veikia per prototipo grandinę, todėl rezultatas gali būti true ir 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.