Ответ
Метод hasOwnProperty() проверяет, принадлежит ли свойство непосредственно самому объекту, а не его цепочке прототипов. Это критически важно для корректного перебора и проверки свойств, особенно при использовании for...in.
Пример проблемы без hasOwnProperty:
const user = { name: 'Alice', age: 30 };
// Проверка через 'in' даёт ложное срабатывание
console.log('toString' in user); // true (свойство унаследовано от Object.prototype)
console.log('valueOf' in user); // true (также унаследовано)
// Корректная проверка через hasOwnProperty
console.log(user.hasOwnProperty('name')); // true
console.log(user.hasOwnProperty('toString')); // false
Безопасное использование в цикле for...in:
for (const key in user) {
if (user.hasOwnProperty(key)) {
console.log(`${key}: ${user[key]}`); // Выведет только 'name' и 'age'
}
}
Важное замечание: Сам метод hasOwnProperty может быть переопределён в объекте. Для абсолютной надёжности используйте:
Object.prototype.hasOwnProperty.call(user, 'name');
// или в современных средах
Object.hasOwn(user, 'name');