Ответ 1
У вас есть (по крайней мере) четыре варианта:
-
Во многих случаях вы можете использовать любопытно-могущественную
||
оператор:x = obj.key || "default";
Это означает: установите
x
вobj.key
еслиobj.key
является ложным, и в этом случае вместо этого используйте"default"
. В falsy значения неundefined
,null
,0
,NaN
,""
, и, конечно,false
. Поэтому вы не захотите использовать его, еслиobj.key
может быть0
или любым другим из этих значений. -
Для ситуаций, когда
||
не применяется, тамin
операторе:x = "key" in obj ? obj.key : "default";
in
указывает, имеет ли объект свойство с данным ключом. Обратите внимание, что ключ является строкой (имена свойств - это строки или символы, если вы использовали символ, вы бы знали). Поэтому, еслиobj.key
может быть действительным0
, вы должны использовать это, а не # 1 выше. -
in
найдет ключ, если он находится в объекте или цепочке прототипов объекта (например, все места, откуда вы его получите, если вы получите свойство). Если вы просто хотите проверить сам объект, а не цепочку прототипов, вы можете использоватьhasOwnProperty
:x = obj.hasOwnProperty("key") ? obj.key : "default";
-
В частности, проверьте,
undefined
:x = typeof obj.key !== "undefined" ? obj.key : "default";
Это будет использовать значение по умолчанию, если
obj
не имеет этого свойства или имеет свойство, но значение свойства неundefined
.