至少在JavaScript中,以下情况属实:
0 == [] // true
0 == false // true
![] == false // true
为什么?我知道==
在类型上意味着等于但不等于,但在这种情况下,false == true
怎么可能呢?
答案 0 :(得分:3)
当使用非严格相等运算符时,JavaScript会将对象强制转换为布尔值。
0 == []
因为JavaScript将两个值(两者都是相同类型的不)强制转换为布尔值以进行比较。换句话说,false == false
。
另一方面,如果您使用===
,则需要检查对象是否相等。
一个有趣的用例是:
[] === []; // => false
这是因为===
正在检查对象的内存位置。两个阵列不共享相同的内存位置。但是:
var arr = [];
arr === arr; // ==> true
但是,这是另一个有趣的转折:
1 === 1; // ==> true
对于数组和普通对象,JavaScript引用内存位置。但是对于字符串和数字这样的值,JavaScript会检查这些值是否与===
运算符完全相同。
因此,最大的区别在于==
和===
的差异,以及JavaScript如何强制类型。
提示:这就是为什么通常建议您使用严格===
运算符,如果您需要防止强制行为(但是,有时强制行为对您有利,例如,当处理跨浏览器问题时,一个浏览器中的值可能为undefined
,而另一个浏览器中的值为null
。然后您可以说!!thatStrangeValue
之类的内容,{{1} }}和undefined
将被强制执行相同的操作。)
null
以上陈述都是正确的,这很奇怪。我会说第一个声明是检查空虚,而第二个是检查是否存在。有人知道最后一点的答案吗?
答案 1 :(得分:1)
在JavaScript中,有两种类型的相等。存在由==
表示的值的相等性以及由===
表示的值和类型的相等性。后者是严格的相等运算符。
在您的情况下,我们只是按值检查相等,而不是类型。
[]
代表一个空对象,表示[]
和0
具有相同的值。
在JavaScript中,任何大于或等于1的数字的值为true
,值为0的值为false
希望这有帮助