我们经常在 JavaScript 代码中使用以下代码模式
if (typeof(some_variable) != 'undefined' && some_variable != null) { // Do something with some_variable }
是否有一种不那么冗长的检查方法具有相同的效果?
根据一些论坛和文献的说法,简单地说以下应该具有相同的效果。
if (some_variable) { // Do something with some_variable }
不幸的是,当未定义时,Firebug在运行时将这样的语句评估为错误some_variable,而第一个语句就可以了。这只是 Firebug 的一种(不需要的)行为,还是这两种方式之间真的有一些区别?
some_variable
您必须区分不同的情况:
变量可以是undefined或未 声明 的。如果您在除typeof.
undefined
typeof
if(typeof someUndeclaredVar == whatever) // works if(someUndeclaredVar) // throws error
已声明但未初始化的变量是undefined.
let foo; if (foo) //evaluates to false because foo === undefined
someExistingObj.someUndefProperty
false
0
if(obj.undefProp)
value = obj.prop || defaultValue
这意味着“如果obj有属性prop,则将其分配给value,否则分配默认值defautValue”。
obj
prop
value
defautValue
有些人认为这种行为令人困惑,认为它会导致难以发现的错误,并建议改用in运算符
in
value = ('prop' in obj) ? obj.prop : defaultValue