Sobes.tech
Junior

Ko pārbauda instanceof operators JavaScript?

sobes.tech AI

Atbilde no AI

JavaScript instanceof operators pārbauda, vai objekts irstancē no noteiktas klases vai konstruktora.

Darbo princips:

  1. instanceof pārbauda, vai konstruktora prototype ir objekta prototipu ķēdē.
  2. Ja prototype ir ķēdē, rezultāts ir true.
  3. Ja nav, rezultāts ir false.

Piemēri:

// Klases izveide
class Animal {
  // Konstruktors
  constructor(name) {
    this.name = name;
  }
}

// Klases instancēšanas izveide
let dog = new Animal("Buddy");

// Pārbaude, vai dog ir `Animal` instancē
console.log(dog instanceof Animal); // true

// Pārbaude, vai dog ir `Object` instancē (caur ķēdi)
console.log(dog instanceof Object); // true

// Pārbaude, vai dog ir `Array` instancē (nav)
console.log(dog instanceof Array); // false

// Pārbaude ar iebūvētiem tipiem
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īviem tipiem)
// Ar jaunu objekta izveidi
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Īpašības:

  • instanceof darbojas caur prototipu ķēdi, tāpēc rezultāts var būt true arī vecāku konstruktoriem.
  • Primitīviem tipiem (string, number, boolean, null, undefined, symbol, bigint) instanceof parasti atgriež false, ja tie nav izveidoti ar atbilstošo objektu (new String(), new Number() utt.).
  • Tas var būt neprecīzi, strādājot ar dažādiem JavaScript izpildes kontekstiem (piemēram, dažādos pārlūkprogrammas logu vai iframe kontekstos), jo katram kontekstam ir savi konstruktori.

Citi veidi, kā pārbaudīt tipu:

  • typeof: atgriež virkni, kas norāda uz pamattipu (string, number, boolean, object, function, undefined, symbol, bigint). Nav piemērots konkrētas klases pārbaudei.
  • Object.prototype.toString.call(): sniedz precīzāku tipu, atgriežot virkni ("[object Array]", "[object Date]" utt.).

Kopumā instanceof ir noderīgs, lai pārbaudītu, vai objekts pieder konkrētai klasei vai tās mantojumam.