Hack Frontend Community

Зачем нужен оператор instanceof в JavaScript

Что такое instanceof

Оператор instanceof в JavaScript проверяет, принадлежит ли объект определённому классу (или функции-конструктору) в его цепочке прототипов.

Синтаксис:

obj instanceof Constructor
  • obj — объект, который мы проверяем.
  • Constructor — функция-конструктор или класс.

Оператор возвращает true, если объект obj находится в цепочке прототипов конструктора Constructor.

Пример

function Animal() {}
function Dog() {}

const rex = new Dog();

console.log(rex instanceof Dog);    // true
console.log(rex instanceof Animal); // false

Если бы Dog наследовал Animal, тогда rex instanceof Animal было бы true.

Как работает

Оператор instanceof работает так:

  • Берёт obj.__proto__.
  • Сравнивает его с Constructor.prototype.
  • Если они совпадают — возвращает true.
  • Если нет — поднимается по цепочке __proto__ и повторяет.

Не путайте с typeof

typeof [] // "object"
[] instanceof Array // true

Вывод

  • Используйте instanceof, чтобы понять, принадлежит ли объект определённому типу или был ли он создан через new SomeConstructor.
  • Это мощный инструмент, но не единственный способ проверки типа (например, Object.prototype.toString.call(...) тоже популярен).
  • Будьте внимательны при кросс-окружениях — instanceof может вести себя непредсказуемо.

Важно:

instanceof работает только с объектами, созданными через new или с явно установленным prototype. С примитивами не работает.