我在这里的官方文件https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators上看到:
Null和Undefined类型严格等于它们自己和 抽象地彼此相等。
但我已经在浏览器的控制台中查看了它。所以:
undefined == null --> true
但是
undefined === null --> false //WTF?
这是文档中的拼写错误???
答案 0 :(得分:5)
严格 等于自己(请参阅文档了解strict(===)和{{之间的区别3}}(==)相等)所以它是
undefined === undefined // strict equal -> true
和
null === null // strict equal -> true
和
null == undefined // abstract equal -> true
但不是
undefined === null // strict equal -> false
答案 1 :(得分:2)
不是拼写错误,文档如下所示
Null和Undefined Types严格等于本身
意思是
null === null equals true
undefined === undefined equals true
和
null == undefined equals true
反过来
null === undefined equals false
答案 2 :(得分:0)
===
也会失败,因为它会检查值以及类型而不是仅仅值,这是==
所做的事情,例如
'1' == 1 // => true
BUT
'1' === 1 // => false
使用JS中的typeof
运算符可以看出差异
typeof null // => object
typeof undefined // => undefined
这也是您希望始终使用===
而不是==
的原因,因为类型强制造成了一些疯狂的错误。
如果你不知道强制是什么类型,它只是意味着转换一个类型,以便它可能与另一种类型相匹配,
在此表达式中,数字1将转换为字符串,以使用==
if ('1' == 1)
最好保持==
不变,只使用===
。
所以当===
遇到这种比较时,无论如何都会自动失败。