为什么===而不是==未定义

时间:2014-11-14 21:42:15

标签: javascript typeof

有几个消息来源表示,有两种规范方法可以检查变量是否未定义:

foo === undefined
typeof foo === 'undefined'

但任何人都可以解释,为什么会使用===代替==

编辑:问题不是关于=== vs ==。它是关于使用'undefined'的正确运算符。 ===和==之间的区别很明显。但问题是,在检查值是否未定义时,哪个运算符更正确。

4 个答案:

答案 0 :(得分:8)

当然很简单。你根据自己想要的行为(见下文)

null == undefined // true
undefined === null // false
typeof undefined // 'undefined'
typeof null // 'object'

答案 1 :(得分:4)

===是严格的比较。 ===不仅要比较值,还要比较数据类型,例如:

"2" == 2 is true
"2" === 2 is false

答案 2 :(得分:2)

看起来问题不在于=====运算符之间的区别,而在于在什么情况下应该使用=== undefined比较和typeof == 'unefined'。以及..

有两种方法可以检查未定义的值。

第一种方法是使用严格比较运算符===undefined原语进行比较:

var a;
a === undefined; // true

只有在声明变量但具有未定义值的情况下,上述比较才会按预期工作。 请注意,如果从未声明过变量,则无法使用a === undefined比较,因为它会引发参考错误:

a === undefined // ReferenceError: a is not defined 

这就是为什么在这种情况下typeof比较是防弹的:

typeof a == 'undefined' // true

在两种情况下都能正常工作:如果从未为变量赋值,并且其值实际为undefined

又一个例子。如果我们想要检查可能丢失的prop属性:

someObj.prop === undefined // ReferenceError: a is not defined

但是

typeof someObj.prop == 'undefined' // true

答案 3 :(得分:0)

===运算符测试类型和值。在整个代码中一致地使用它有助于防止一些微妙和恼人的错误,并且通常是一个非常好的主意。

"5" == 5    // True, even though one is a string and the other a number
"5" === 5   // False because the two variables are of different type

虽然与特殊的未定义属性相比,它可能不是绝对必要的,但它肯定不会受到伤害,并且在代码中的所有地方使用===比它更好使用===除了这个角落的情况。一致性很好。