Метод hasOwnProperty() проверяет, есть ли указанное свойство у объекта как его собственное свойство, не заглядывая в прототип. Возвращает true, если свойство найдено, и false, если нет или оно унаследовано.
const obj = { name: 'Александр' };
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('toString')); // falseМетод hasOwnProperty() — это способ проверить, принадлежит ли свойство самому объекту, а не пришло по наследству от прототипа.
Проверяет только собственные свойства объекта:
const obj = { name: 'Иван' };
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('toString')); // falseconst obj = {};
// У всех объектов есть toString, но он унаследован
console.log(obj.hasOwnProperty('toString')); // falseconst user = { name: 'Иван' };
if (user.hasOwnProperty('name')) {
console.log('Своё свойство'); // Сработает
}
if (user.hasOwnProperty('toString')) {
console.log('Своё свойство'); // Не сработает
}const parent = { inherited: 'value' };
const child = Object.create(parent);
child.own = 'value';
console.log(child.hasOwnProperty('own')); // true — своё
console.log(child.hasOwnProperty('inherited')); // false — унаследованоconst arr = [1, 2, 3];
// Методы массива унаследованы
console.log(arr.hasOwnProperty('push')); // false
console.log(arr.hasOwnProperty('length')); // true — своё свойствоconst obj = { name: 'Иван' };
// Безопасный перебор только своих свойств
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]); // Только свои свойства
}
}const obj = { name: 'Иван' };
// ❌ Видим все свойства, включая унаследованные
for (let key in obj) {
console.log(key); // name, toString, hasOwnProperty...
}
// ✅ Только свои свойства
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key); // только name
}
}const data = { a: 1, b: 2 };
// Убедиться, что свойства свои, не унаследованные
Object.keys(data).forEach(key => {
if (data.hasOwnProperty(key)) {
console.log(key, data[key]);
}
});const obj = { name: 'Иван' };
// ❌ Видит всё, включая унаследованное
console.log('toString' in obj); // true
// ✅ Видит только свои свойства
console.log(obj.hasOwnProperty('toString')); // falseconst obj = { name: 'Иван' };
// ❌ Ошибка — не проверяем наследование
for (let key in obj) {
console.log(obj[key]); // Выведет и name, и toString, и другие методы
}
// ✅ Правильно — проверяем наследование
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(obj[key]); // Только name
}
}Метод hasOwnProperty() важен для работы с объектами, когда нужно отличать свои свойства от унаследованных.
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪