我们经常在 JavaScript 代码中使用以下代码模式
if (typeof(some_variable) != 'undefined' && some_variable != null)
{
// Do something with some_variable
}
是否有一种不那么冗长的检查方法具有相同的效果?
根据一些论坛和文献的说法,简单地说以下应该具有相同的效果。
if (some_variable)
{
// Do something with some_variable
}
不幸的是,当 some_variable
未定义时, Firebug 在运行时将这样的语句评估为错误,而第一个就可以了。这只是 Firebug 的一种(不需要的)行为,还是这两种方式之间真的有一些区别?
原文由 Tomas Vana 发布,翻译遵循 CC BY-SA 3.0 许可协议
您必须区分不同的情况:
undefined
或 undeclared 。如果您在typeof
以外的任何上下文中访问未声明的变量,您将收到错误消息。已声明但未初始化的变量是
undefined
。someExistingObj.someUndefProperty
。 undefined 属性不会产生错误,只会返回undefined
,当转换为布尔值时,其计算结果为false
。所以,如果你不在乎0
和false
,使用if(obj.undefProp)
是可以的。基于这个事实有一个常见的成语:这意味着“如果
obj
具有属性prop
,则将其分配给value
,否则分配默认值defautValue
”。有些人认为这种行为令人困惑,认为它会导致难以发现的错误,并建议使用
in
运算符