Sobes.tech
Junior

Šta proverava operator instanceof u JavaScript-u?

sobes.tech АИ

Одговор од АИ

Оператор instanceof у JavaScript-у проверава да ли је објекат инстанца од одређене класе или конструктора.

Принцип рада:

  1. Оператор instanceof проверава да ли је prototype конструктора присутан у ланцу прототипа објекта.
  2. Ако је prototype конструктора у ланцу, резултат је true.
  3. У супротном, резултат је false.

Примери:

// Креирамо класу
class Animal {
  // Конструктор
  constructor(name) {
    this.name = name;
  }
}

// Креирамо инстанцу класе
let dog = new Animal("Buddy");

// Проверавамо да ли је dog инстанца од Animal
console.log(dog instanceof Animal); // true

// Проверавамо да ли је dog инстанца од Object (преко ланца прототипа)
console.log(dog instanceof Object); // true

// Проверавамо да ли је dog инстанца од Array (није)
console.log(dog instanceof Array); // false

// Провера са уграђеним типовима
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 (за примитиве, `instanceof` се понаша специфично)
// За примитиве креиране помоћу new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Карактеристике:

  • instanceof ради кроз ланац прототипа, па резултат може бити true за родитељске конструкторе.
  • За примитивне типове (string, number, boolean, null, undefined, symbol, bigint), instanceof обично враћа false ако нису креирани кроз одговарајући објекат-обвивку (new String(), new Number(), итд.).
  • Може бити нетачан када се ради са различитим контекстима извршавања JavaScript-а (нпр. различити прозори или iframe-ови), јер сваки контекст има своје конструкторе.

Слични приступи за проверу типа:

  • typeof: враћа низ који указује на основни тип података (string, number, boolean, object, function, undefined, symbol, bigint). Не погодан за проверу припадности одређеној класи.
  • Object.prototype.toString.call(): враћа прецизнији низ са типом објекта ("[object Array]", "[object Date]", итд.).

Укупно гледано, instanceof је користан за проверу да ли објекат припада одређеној класи или њеном претку у хијерархији наслеђивања.