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