in, метод hasOwnProperty и др.

В этой статье показаны три способа проверить, обладает ли объект определенным свойством.

Доступ к собственности и проверка стоимости

Один из вариантов - просто получить доступ к свойству и проверить его значение. Если свойство не существует, мы получим undefined.

const obj = {
  name: 'Jon Snow'
}
const hasProp = obj.name !== undefined;
//true

Вот свойство, которого не существует.

const hasProp = obj.house !== undefined;
//false

Тем не менее этот метод не обнаруживает свойства, которые существуют и имеют значение undefined.

const obj = {
  name: undefined
}
const hasProp = obj.name !== undefined;
//false

Мы даже можем использовать встроенную функцию Boolean для преобразования полученного значения в логическое значение. Однако он вернет false, если значение ложное, что означает _5 _, _ 6_, undefined, NaNn, 0 или ''.

const hasProp = Boolean(obj.house);
//false

в операторе

Оператор in возвращает true, если указанное свойство находится в указанном объекте или в его цепочке прототипов.
Он возвращает true, если свойство существует, даже если значение равно undefined.

const obj = {
  name: undefined
}
const hasProp = "name" in obj;
//true

Как уже было сказано, нет никакой разницы между собственными и унаследованными свойствами. Следующая проверка возвращает true для свойства toString, унаследованного от Object.prototype.

const obj = {
  name: undefined
}
const hasProp = "toString" in obj;
//true

hasOwnProperty

Метод hasOwnProperty проверяет, существует ли указанное свойство и принадлежит ли объекту. Он не принимает во внимание унаследованные свойства.

const obj = {
  name: undefined
}
const hasProp = obj.hasOwnProperty("name");
//true

При тестировании наследуемого свойства, такого как toString, он возвращает false.

const hasProp = obj.hasOwnProperty("toString");
//false

Это все. Подробнее об объектах вы можете прочитать в 4 способа создания объектов в JavaScript.

Спасибо за прочтение.