使用`typeof ==`和`===`检查未定义

时间:2013-12-26 21:17:24

标签: javascript

我刚刚在“==与===”上阅读了这篇优秀的question和热门answer

var x = undefined;

检查x是否真正等于undefined时,以下两项都有效。

if(typeof x == "undefined") {
    console.log("typeof x == \"undefined\"");
}

if(x === undefined) {
    console.log("x === undefined");
}

输出:

  

typeof x ==“undefined”

     

x === undefined

是否比其他方式更加惯用?如果是这样,为什么?

3 个答案:

答案 0 :(得分:3)

我想说如果您可以控制x的可能值范围,那么检查x === undefined是最惯用的方法。例如,如果您有一个返回结果的函数,或者undefined如果遇到错误。

否则,您应该使用typeof x == 'undefined'

需要注意的是,某些表达式和变量可以是undefined,因为它们根本没有定义,而其他表达式和变量则明确定义为undefined

如果您尝试这样做:

var x = undefined;
if(typeof x == "undefined") // This works
if(x === undefined) // This works
if(typeof y == "undefined") // This works
if(y === undefined) // This does not work and throws a ReferenceError

所以基本上,如果你无法控制variable's range,使用typeof会更安全,更容易,因为你不必实现异常处理。

答案 1 :(得分:0)

上述条件检查都有效,因此可以互换使用。但是,由于您已经询问过惯用,我会说条件检查:typeof x == undefined在阅读时听起来更好,并解释了代码的真正功能,因此,我的个人投票:)

答案 2 :(得分:0)

如果你使用原始javascript,你最好做typeof x == "undefined",为什么?

因为undefined是一个全局变量,在某些浏览器中它不是只读的,任何人都可以覆盖它,例如,在Chrome 14或Firefox 6中你可以这样做:

window.undefined = "MyUndefined"

这会覆盖undefined全局变量,当然看起来很嘲笑甚至担心这个,但是当你检查你的变量未定义时,它会更加安全,如下所示: / p>

typeof x == "undefined"
  • 这是我反对使用undefined属性的主要原因。

这与使用原始javascript有什么关系:

如果你使用jQuery,jQuery已经用真正的undefined值覆盖了全局变量undefined