/
Вопросы и ответы
/
JavaScript
/

Чем отличается Object.hasOwn и Object.prototype.hasOwnProperty

Чем отличается Object.hasOwn и Object.prototype.hasOwnProperty

2 года назад

Ivan Gagarinov

Ответы

25

Оба метода Object.hasOwn() и Object.hasOwnProperty() проверяют существование ключа в объекте. Они возвращают true, если указанный объект имеет собственное свойство, которое было передано. Если свойство унаследовано или не существует, метод возвращает false.

const company1 = { name: 'Hexlet' };
console.log(Object.hasOwn(company1, 'name')); // => true
console.log(Object.hasOwn(company1, 'createdAt')); // => false

console.log(company1.hasOwnProperty('name')); // => true
console.log(company1.hasOwnProperty('createdAt')); // => false

const company2 = Object.create({ description: 'Technology company' });
console.log(Object.hasOwn(company2, 'description')); // => false

Object.hasOwn() более современный метод, он пришел на замену Object.hasOwnProperty(). Рекомендуется использовать его вместо hasOwnProperty(), так как он работает для объектов, созданных с помощью Object.create(null) и для объектов, которые переопределили унаследованный hasOwnProperty() метод:

const company1 = Object.create(null);
company1.createdAt = '01-01-2005';
console.log(Object.hasOwn(company1, 'createdAt')); // => true
console.log(company1.hasOwnProperty('createdAt')); // Error - company1.hasOwnProperty is not a function
const company1 = {
  hasOwnProperty: () => false,
  createdAt: '01-01-2005',
};
 
console.log(Object.hasOwn(company1, 'createdAt')); // => true
console.log(company1.hasOwnProperty('createdAt')); // => false

2 года назад

Ivan Gagarinov

2

Согласен с Егором:

тут наш копирщик

const person2 = Object.create({ gender: 'male' }); console.log(Object.hasOwn(person2, 'gender')); // => false console.log(person.hasOwnProperty('gender')); // => false

забыл "скопировать" комментарий. Администрация вообще не следит за наполнением?

год назад

Дмитрий Садовников

2

Больше меня всего удивляет, что люди копируют чужую информацию, https://stackoverflow.com/questions/69561596/object-hasown-vs-object-prototype-hasownproperty большой вопрос зачем? для того чтобы вывести тренды

год назад

Egor

1

Всё в одном месте, не вижу ничего плохого

год назад

Тимур Эшимов