您必须区分两种情况:
变量可以是
undefined
或未 声明的 。如果您在以外的任何上下文中访问未声明的变量,则会收到错误消息typeof
。if(typeof someUndeclaredVar == whatever) // works
if(someUndeclaredVar) // throws error
已声明但尚未初始化的变量是
undefined。
let foo;if (foo) //evaluates to false because foo === undefined
- 未定义的 属性 ,例如
someExistingObj.someUndefProperty
。未定义的属性不会产生错误,而只会返回undefined
,当转换为布尔值时,其结果为false
。因此,如果您不关心0
andfalse
,则可以使用if(obj.undefProp)
。基于这个事实,有一个常见的成语:value = obj.prop || defaultValue
这表示“如果
obj具有属性
prop,请将其分配给
value,否则分配默认值
defautValue”。
有些人认为此行为令人困惑,认为它会导致难以发现的错误,因此建议改用
in运算符
value = ('prop' in obj) ? obj.prop : defaultValue


