Часто при работе с объектом полезно проверить, что содержится в этом объекте, есть ли в нём свойство с заданным именем и какое это свойство. Данную процедуру можно проделать с помощью оператора in и с помощью методов hasOwnProperty() и propertyIsEnumerable() или просто обратившись к свойству.
Оператор in
Оператор in принимает имя свойства (в виде строки) в левом операнде и объект в правом операнде. Оператор in возвращает true, если свойство содержится в указанном объекте или в его цепочке прототипов:
На заметку: Значение свойства в левом операнде оператора in заключается в двойные кавычки – то есть на самом деле указывается текстовая строка с названием свойства. Так же мы поступаем, когда к свойству объекта обращаемся с использованием квадратных скобок, то есть при использовании команды вида объект["свойство"].
Если вы удалили свойство при помощи оператора delete, то оператор in возвратит false для этого свойства:
Если вы добавите в объект свойство со значением undefined, то для этого свойства оператор in вернет значение true:
Метод hasOwnProperty()
Метод hasOwnProperty() объекта проверяет, имеет ли объект собственное свойство с указанным именем. В отличие от оператора in, этот метод не проверяет существование свойств в цепочке прототипов объекта:
Метод propertyIsEnumerable()
Метод propertyIsEnumerable() возвращает логическое значение true, если указанное свойство является перечисляемым. Метод propertyIsEnumerable() возвращает значение false, если объект не имеет свойства с указанным именем или если указанное свойство не является перечислимым. Как правило, предопределенные свойства не являются перечислимыми, но свойства, определенные пользователем, всегда перечислимы.
Метод propertyIsEnumerable() не учитывает объекты в цепи прототипов:
Сравнение с undefined
Вместо использования оператора in можно также выполнить следующее: сначала прочитать значение свойства, а затем использовать оператор !== для проверки на неравенство значению undefined:
Стоит отметить, что есть одна операция, которую можно выnолнить только с помощью оператора in: оператор in отличает несуществующие свойства от свойств, которые существуют, но имеют значение undefined:
Итоги
- Оператор in возвращает
true, если свойство содержится в указанном объекте или в его цепочке прототипов. - Значение свойства в левом операнде оператора in заключается в двойные кавычки – то есть на самом деле указывается текстовая строка с названием свойства.
- Метод hasOwnProperty() объекта проверяет, имеет ли объект собственное свойство с указанным именем. В отличие от оператора in, этот метод не проверяет существование свойств в цепочке прототипов объекта.
- Метод propertyIsEnumerable() возвращает логическое значение
true, если указанное свойство является перечисляемым. - Можно также легко проверить существование свойства – получив его и сравнив с
undefined.


Комментарии
<code>, несколько строчек кода — в теги<pre><code>...ваш код...</code></pre>.