我认为最有效的方式来测试“值null
或undefined
”被
if ( some_variable == null ){
// some_variable is either null or undefined
}
因此,这两行是等效的:
if ( typeof(some_variable) !== "undefined" && some_variable !== null ) {}
if ( some_variable != null ) {}
注1
如问题中所提到的,short变体要求some_variable
已声明,否则将引发ReferenceError。但是,在许多用例中,您可以假定这是安全的:
检查可选参数:
function(foo){
if( foo == null ) {...}
检查现有对象的属性
if(my_obj.foo == null) {...}
另一方面typeof
可以处理未声明的全局变量(简单地返回undefined
)。正如Alsciende解释的那样,出于充分的原因,这些案例应该减少到最少。
笔记2
这个-甚至更短-的变体并不等效:
if ( !some_variable ) {
// some_variable is either null, undefined, 0, NaN, false, or an empty string
}
所以
if ( some_variable ) {
// we don't get here if some_variable is null, undefined, 0, NaN, false, or ""
}
注3
通常,建议使用===
代替==
。提议的解决方案是该规则的例外。为此,JSHint语法检查器甚至提供了该eqnull
选项。
从jQuery样式指南:
应该使用严格的相等性检查(===)来支持==。唯一的例外是通过null检查undefined和null时。
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
if(some_variable) { ... }
如果some_variable
isfalse
或0
or,将不会执行