繁体   English   中英

比较JavaScript中的未定义值

[英]Comparing undefined value in JavaScript

我有一个其值有时可能不确定的对象。 因此,是否有可能/有效/好的做法是使用以下if情况进行测试:

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

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

截至目前,它运行良好。 但是,我想知道它是否随时可能出错?

谢谢

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

if (typeof params === 'undefined')

如果params不是已知的变量名,这也不会抛出错误。

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

参考未定义

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 ,后者是半有用的运算符之一,可以承诺很多但不能提供很多东西)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM