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.
Спасибо за прочтение.