比较JavaScript中的未定义值

时间:2013-05-09 02:52:09

标签: javascript undefined

我有一个对象,其值有时可能未定义。因此,使用如下情况进行测试是可行/有效/良好的做法:

if(params === undefined)  
{  
    alert("sound." + params);  
}  

如果没有,我们为什么不能这样做?

截至目前,它运作良好。然而,我想知道它是否可以随时出错?

谢谢

3 个答案:

答案 0 :(得分:3)

因为理论上undefined可以重新定义(至少在JS 1.8.5之前),所以最好使用

if (typeof params === 'undefined')

如果params不是已知的变量名称,这也可以不引发错误。

答案 1 :(得分:1)

使用typeof varName可以更安全地使用: -

如果params不是代码中任何地方声明的变量,则不会抛出任何错误。

 if(typeof params  === "undefined")
   {
       //it is not defined
   }

 if(params === undefined)   //<-- This will fail of you have not declared the variable 
        //param. with error "Uncaught ReferenceError: params is not defined "
 {
 }

Refer Undefined

答案 2 :(得分:1)

typeof 的答案很好,这里有点额外的。对我来说,这是一个需要用 params 解释你在做什么的情况。如果你这么说:

function foo(paramObject) {
  // determine if a suitable value for paramObject has been passed
}

那么你可能应该测试 paramObject 是否是一个对象,而不是它是否具有除 undefined 之外的某些值。所以你可以这样做:

  if (typeof paramObject == 'object') {
    // paramObject is an object
  }

但你仍然不太了解这个对象,它可能是任何东西(包括 null )。所以通常你会记录应该传入的对象,然后执行:

  if (paramObject) {
    // do stuff, assuming if the value is not falsey, paramObject is OK
  }

现在如果它抛出错误,那就是调用者没有提供合适对象的错误。

推论是所有变量都应声明,以便测试不会抛出错误(并且您不需要使用 typeof ,这是承诺的半有用运算符之一很多,但没有提供很多)。