Junior
Какво проверява операторът instanceof в JavaScript?
sobes.tech AI
Отговор от 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 е полезен за проверка дали обект принадлежи към конкретен клас или негов предшественик в йерархията на наследяване.