有几个消息来源表示,有两种规范方法可以检查变量是否未定义:
foo === undefined
typeof foo === 'undefined'
但任何人都可以解释,为什么会使用===
代替==
?
编辑:问题不是关于=== vs ==。它是关于使用'undefined'的正确运算符。 ===和==之间的区别很明显。但问题是,在检查值是否未定义时,哪个运算符更正确。
答案 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
虽然与特殊的未定义属性相比,它可能不是绝对必要的,但它肯定不会受到伤害,并且在代码中的所有地方使用===比它更好使用===除了这个角落的情况。一致性很好。