比较JavaScript中未定义的值

Comparing undefined value in JavaScript

本文关键字:未定义 JavaScript 比较      更新时间:2023-09-26

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

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

引用未定义的

类型的答案很好,这里有一点额外的。对我来说,在这种情况下,你需要解释你在用参数做什么。如果你正在做,说:

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,这是那些承诺很多但没有交付很多的半有用的操作符之一)。