Для проверки факта наличия того или иного свойства у объекта может использо_ ваться оператор in (см. главу 5). С левой стороны от оператора помещается имя свойства в виде строки, с правой стороны – проверяемый объект. Например:
// Если объект o имеет свойство с именем "x", установить его if ("x" in o) o.x = 1;
Однако потребность в операторе in возникает не так часто, потому что при обра_ щении к несуществующему свойству возвращается значение undefined. Таким образом, указанный фрагмент обычно записывается следующим образом:
// Если свойство x существует и его значение
// не равно undefined, установить его.
if (o.x !== undefined) o.x = 1;
Обратите внимание: есть вероятность, что свойство фактически существует, но еще не определено. Например, если записать такую строку:
o.x = undefined
то свойство x будет существовать, но не будет иметь значения. В этом случае в первом из показанных фрагментов в свойство x будет записано значение 1, во втором – нет.
| 7.3. Объекты как ассоциативные массивы
|
|
|
|
|
Кроме того, обратите внимание, что вместо обычного оператора != был использо_ ван оператор !==. Операторы !== и === различают значения undefined и null, хотя иногда в этом нет необходимости:
// Если свойство doSomething существует и не содержит значение null
// или undefined, тогда предположить, что это функция и ее следует вызвать! if (o.doSomething) o.doSomething();