Часто при работе с объектом полезно проверить, что содержится в этом объекте, есть ли в нём свойство с заданным именем и ка­кое это свойство. Данную процедуру можно проделать с помощью оператора in и с помощью методов hasOwnProperty() и propertyIsEnumerable() или просто обратившись к свойству.

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

Выполнить код »

На заметку: Значение свойства в левом операнде оператора in заключается в двойные кавычки – то есть на самом деле указывается текстовая строка с названием свойства. Так же мы поступаем, когда к свойству объекта обращаемся с использованием квадратных скобок, то есть при использовании команды вида объект["свойство"].

Если вы удалили свойство при помощи оператора delete, то оператор in возвратит false для этого свойства:

Выполнить код »

Если вы добавите в объект свойство со значением undefined, то для этого свойства оператор in вернет значение true:

Выполнить код »

Метод hasOwnProperty() объекта проверяет, имеет ли объект собственное свойство с указанным именем. В отличие от оператора in, этот метод не проверяет существование свойств в цепочке прототипов объекта:

Выполнить код »

Метод propertyIsEnumerable() возвращает логическое значение true, если указанное свойство является перечисляемым. Метод propertyIsEnumerable() возвращает значение false, если объект не имеет свойства с указанным именем или если указанное свойство не является перечислимым. Как правило, предопределенные свойства не являются перечислимыми, но свойства, определенные пользователем, всегда перечислимы.
Метод propertyIsEnumerable() не учитывает объекты в цепи прототипов:

Выполнить код »

Вместо использования оператора in можно также выполнить следующее: сначала прочитать значение свой­ства, а затем использовать оператор !== для проверки на неравенство значению undefined:

Выполнить код »

Стоит отметить, что есть одна операция, которую можно выnол­нить только с помощью оператора in: оператор in отличает несуществующие свой­ства от свойств, которые существуют, но имеют значение undefined:

Выполнить код »
  • Оператор in возвращает true, если свойство содержится в указанном объекте или в его цепочке прототипов.
  • Значение свойства в левом операнде оператора in заключается в двойные кавычки – то есть на самом деле указывается текстовая строка с названием свойства.
  • Метод hasOwnProperty() объекта проверяет, имеет ли объект собственное свойство с указанным именем. В отличие от оператора in, этот метод не проверяет существование свойств в цепочке прототипов объекта.
  • Метод propertyIsEnumerable() возвращает логическое значение true, если указанное свойство является перечисляемым.
  • Можно также легко проверить существование свойства – получив его и сравнив с undefined.

Комментарии

пожелания к комментариям…
  • Приветствуются комментарии, соответствующие теме урока: вопросы, ответы, предложения.
  • Одну строчку кода оборачивайте в тег <code>, несколько строчек кода — в теги <pre><code>...ваш код...</code></pre>.
  • Допускаются ссылки на онлайн-песочницы (codepen, plnkr, JSBin и др.).