小编典典

如何在JavaScript中检查未定义或null变量?

javascript

我们经常在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的一种(有害的)行为,还是这两种方式之间确实存在某些区别?


阅读 279

收藏
2020-04-25

共1个答案

小编典典

您必须区分两种情况:

  1. 变量可以是undefined或未 声明的 。如果您在以外的任何上下文中访问未声明的变量,则会收到错误消息typeof

    if(typeof someUndeclaredVar == whatever) // works
    if(someUndeclaredVar) // throws error

已声明但尚未初始化的变量是undefined

let foo;
if (foo) //evaluates to false because foo === undefined
  1. 未定义的 属性 ,例如someExistingObj.someUndefProperty。未定义的属性不会产生错误,而只会返回undefined,当转换为布尔值时,其结果为false。因此,如果您不关心 0and false,则可以使用if(obj.undefProp)。基于这个事实,有一个常见的成语:
    value = obj.prop || defaultValue
    

这表示“如果obj具有属性prop,请将其分配给value,否则分配默认值defautValue”。

有些人认为此行为令人困惑,认为它会导致难以发现的错误,因此建议改用in运算符

    value = ('prop' in obj) ? obj.prop : defaultValue
2020-04-25