Sobes.tech
Junior

Mida kontrollib instanceof operaator JavaScriptis?

sobes.tech AI

Vastus AI-lt

JavaScripti instanceof operaator kontrollib, kas objekt on konkreetse klassi või konstruktori instants.

Tööpõhimõte:

  1. instanceof kontrollib, kas konstruktori prototype on objekti prototüüpide ahelas.
  2. Kui prototype on ahelas, on tulemus true.
  3. Kui mitte, on tulemus false.

Näited:

// Klass defineerimine
class Animal {
  // Konstruktor
  constructor(name) {
    this.name = name;
  }
}

// Klassist instantsi loomine
let dog = new Animal("Buddy");

// Kontroll, kas dog on `Animal` instants
console.log(dog instanceof Animal); // true

// Kontroll, kas dog on `Object` instants (ahel kaudu)
console.log(dog instanceof Object); // true

// Kontroll, kas dog on `Array` instants (ei ole)
console.log(dog instanceof Array); // false

// Sisseehitatud tüüpide kontroll
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 (primitiivsete väärtuste puhul)
// Uue objekti kaudu loodud
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Omadused:

  • instanceof töötab prototüüpide ahelas, seega võib tulemus olla true ka vanemate konstruktorite puhul.
  • Primitiivsete tüüpide (string, number, boolean, null, undefined, symbol, bigint) puhul tagastab instanceof tavaliselt false, kui neid ei ole loodud vastava objekti kaudu (new String(), new Number() jne).
  • Võib olla ebatäpne erinevates JavaScripti kontekstides (näiteks erinevates brauseriakendes või iframe'ides), kuna iga kontekstil on omad konstruktorid.

Tüüpide kontrollimise alternatiivsed meetodid:

  • typeof: tagastab stringi, mis näitab põhitüüpi (string, number, boolean, object, function, undefined, symbol, bigint). Ei sobi konkreetse klassi kuuluvuse kontrollimiseks.
  • Object.prototype.toString.call(): annab täpsema tüübi stringi ("[object Array]", "[object Date]" jne).

Üldiselt on instanceof kasulik objekti kuuluvuse kontrollimiseks konkreetsele klassile või selle eelkäijale päriliku ahela kaudu.