javascript - 为什么 0 == [],但 0 == false 和 ![] == false?

标签 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。那么你可以说类似 的内容! !thatStrangeValueundefinednull 都将被强制转换为相同的内容。

编辑

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 - 为什么 JavaScript 只有在 IE 中打开开发者工具一次后才能工作?

javascript - Jquery动画回调问题

javascript - FF 13,IE 9 : JSON stringify/geolocation object

java - 如何与一些 JavaScript 函数共享 Java 代码中的变量

javascript - 如何将元素传递给 jQuery UI 对话框?

javascript - 调用另一个导出方法的函数