在JavaScript中检查null / undefined

时间:2010-12-05 18:37:48

标签: javascript

此代码可以

if (typeof foo != "undefined" && foo !== null) { }  

安全地重构为此代码?

if (foo != null) { }

这是完全一样的吗? (如果没有,它有什么不同?)

3 个答案:

答案 0 :(得分:11)

不是真的。如果未声明foo,您将在第二个示例中抛出ReferenceError个异常。

另一方面,您可以使用typeof运算符安全地检查未定义的非声明变量。

答案 1 :(得分:2)

一个简单的实验将回答这个问题:

if( foo != null ) {
   alert('foo not null');
}

以上示例在许多浏览器中产生javascript错误:"ReferenceError: Can't find variable: foo"。这是因为我们使用了之前未声明为参数的变量或当前范围内的var

另一方面,typeof运算符明确适应尚未定义的变量 - 它返回'undefined',因此:

if( typeof foo != 'undefined') {
    alert('foo is not defined');
}

按预期工作。

所以答案是“不” - 它们不是一回事 - 虽然在某些 javascript环境中它们的行为可能相同,但在其他环境中第二种形式在未定义foo时会产生错误。

答案 2 :(得分:2)

变量实际上可以保存值undefined,如果从未赋值变量,则该值为默认值。因此,如果使用foo != null声明变量或通过赋值给出值,var将起作用,但如果不是,则会得到ReferenceError。因此,这两个片段等效。

如果您确定声明了foo,那么这比原始的第二个片段更安全,更容易理解,假设代码中没有undefined = 42存在:

if(foo !== undefined && foo !== null) { }