Чем отличается Object.hasOwn и Object.prototype.hasOwnProperty
Ответы
Ivan Gagarinov
22 ноября 2023
Оба метода Object.hasOwn()
и Object.hasOwnProperty()
проверяют существование ключа в объекте. Они возвращают true, если указанный объект имеет собственное свойство, которое было передано. Если свойство унаследовано или не существует, метод возвращает false.
const person = { name: 'John' };
console.log(Object.hasOwn(person, 'name')); // => true
console.log(Object.hasOwn(person, 'age')); // => false
console.log(person.hasOwnProperty('name')); // => true
console.log(person.hasOwnProperty('age')); // => false
const person2 = Object.create({ gender: 'male' });
console.log(Object.hasOwn(person2, 'gender')); // => false
console.log(person.hasOwnProperty('gender')); // => false
Object.hasOwn()
более современный метод, он пришел на замену Object.hasOwnProperty()
.
Рекомендуется использовать его вместо hasOwnProperty()
, так как он работает для объектов, созданных с помощью Object.create(null)
и для объектов, которые переопределили унаследованный hasOwnProperty()
метод:
const person = Object.create(null);
person.age = 35;
console.log(Object.hasOwn(person, 'age')); // => true
console.log(person.hasOwnProperty('age')); // Error - person.hasOwnProperty is not a function
const person = {
hasOwnProperty: () => false,
age: 35,
};
console.log(Object.hasOwn(person, 'age')); // => true
console.log(person.hasOwnProperty('age')); // => false
11
0