Junior
148
questionbank
Что проверяет оператор instanceof в JavaScript?
Ответ от нейросети
sobes.tech AI
Оператор instanceof в JavaScript проверяет, является ли объект экземпляром определенного класса или конструктора.
Принцип работы:
- Оператор
instanceofпроверяет наличиеprototypeконструктора в цепочке прототипов объекта. - Если
prototypeконструктора присутствует в цепочке, результатtrue. - В противном случае результат
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 полезен для проверки принадлежности объекта к конкретному классу или его предку в иерархии наследования.