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

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
22 ноября 2023

Оба метода 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
24 0

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

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

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

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

2 1
Аватар пользователя Тимур Эшимов
Тимур Эшимов
31 августа 2024

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

1 0
Аватар пользователя Egor
Egor
11 мая 2024

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

2 2
Познакомьтесь с основами JavaScript бесплатно