2

我有一个对象,其值有时可能未定义。那么是否有可能/有效/良好的做法来用下面的 if 案例来测试它:

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

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

截至目前,它工作正常。但是,我想知道它是否会随时出错?

谢谢

4

3 回答 3

3

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

if (typeof params === 'undefined')

params如果不是已知的变量名,这也可以正常工作而不会引发错误。

于 2013-05-09T02:57:00.650 回答
2

使用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 "
 {
 }

参考未定义

于 2013-05-09T02:57:07.573 回答
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,它是那些承诺很多但没有提供很多功能的半有用运算符之一)。

于 2013-05-09T03:15:55.557 回答