Зачем нужен оператор 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
. С примитивами не работает.