<分区>
至少在 JavaScript 中,以下内容是正确的:
0 == [] // true
0 == false // true
![] == false // true
这是为什么呢?我知道 ==
表示等于,但在类型上不等于,但是 false == true
是怎么回事,可以这么说,在那种情况下?
标签 javascript
<分区>
至少在 JavaScript 中,以下内容是正确的:
0 == [] // true
0 == false // true
![] == false // true
这是为什么呢?我知道 ==
表示等于,但在类型上不等于,但是 false == true
是怎么回事,可以这么说,在那种情况下?
最佳答案
JavaScript 在使用非严格相等运算符时将对象强制转换为 bool 值。
0 == []
因为 JavaScript 将两个值(它们都不相同类型)强制转换为 bool 值以进行比较。换句话说,false == false
。
如果您使用 ===
,另一方面,您正在检查对象是否相等。
一个有趣的用例是这样的:
[] === []; // => false
这是因为 ===
正在检查对象的内存位置。两个数组不共享相同的内存位置。然而:
var arr = [];
arr === arr; // ==> true
但是,这里还有另一个有趣的转折:
1 === 1; // ==> true
对于数组和普通对象,JavaScript 引用内存位置。但是对于字符串和数字等值,JavaScript 会使用 ===
运算符检查这些值是否绝对相等。
所以最大的不同在于 ==
和 ===
的不同,以及 JavaScript 如何强制转换类型。
提示:这就是为什么通常建议您在需要防止强制转换时使用严格的 ===
运算符(但是,有时强制转换对您有利,例如,在处理跨浏览器问题时,其中一个值可能在一个浏览器中为 undefined
但在另一个浏览器中为 null
。那么你可以说类似 的内容! !thatStrangeValue
,undefined
和 null
都将被强制转换为相同的内容。
OP 提出了一个很好的观点:
[] == false;
![] == false;
以上说法都是对的,奇怪了。我会说第一个语句是检查是否为空,而第二个语句是检查是否存在。有人知道最后一点的答案吗?
关于javascript - 为什么 0 == [],但 0 == false 和 ![] == false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382482/
相关文章:
javascript - 在调整窗口大小时重新计算多个 div 大小
javascript - Facebook 登录 Django 和 url 重定向?
javascript - 在 javascript/jquery 中单击按钮时如何选择按钮 ID
javascript - 为什么 JavaScript 只有在 IE 中打开开发者工具一次后才能工作?
javascript - FF 13,IE 9 : JSON stringify/geolocation object
java - 如何与一些 JavaScript 函数共享 Java 代码中的变量