我刚刚在“==与===”上阅读了这篇优秀的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
是否比其他方式更加惯用?如果是这样,为什么?
答案 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
。