Часто при работе с объектом полезно проверить, что содержится в этом объекте, есть ли в нём свойство с заданным именем и какое это свойство. Данную процедуру можно проделать с помощью оператора 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>
.