我有一个对象,其值有时可能未定义。因此,使用如下情况进行测试是可行/有效/良好的做法:
if(params === undefined)
{
alert("sound." + params);
}
如果没有,我们为什么不能这样做?
截至目前,它运作良好。然而,我想知道它是否可以随时出错?
谢谢
答案 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 "
{
}
答案 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 ,这是承诺的半有用运算符之一很多,但没有提供很多)。