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