首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么JavaScript中的[] == ![]是真的?

为什么JavaScript中的[] == ![]是真的?
EN

Stack Overflow用户
提问于 2018-07-27 08:44:02
回答 1查看 2.1K关注 0票数 6
代码语言:javascript
复制
var arr = [];
Boolean(arr) // true
Boolean(!arr) // false
arr == arr // true
arr == !arr // true ??? what ???

我不想得到‘推荐使用===而不是==’的答案。我想知道出现这种现象的原因以及JavaScript的类型转换原理。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 09:24:14

JS中的类型转换,特别是在松散相等方面,是一个棘手的问题。

在回答“为什么这个特殊的松散相等以这种方式求值”这个问题时,最好的起点是咨询this table of equality comparisons by operand type

在本例中,我们可以看到,对于[] == false,操作数A是一个对象,操作数B是一个布尔值,因此实际执行的比较将是ToPrimitive(A) == ToNumber(B)

右边很简单;ToNumber(false)的计算结果是0。完事了。

左侧更为复杂;您可以在the official ECMAScript spec中查看ToPrimitive的完整文档,但您真正需要知道的是,在本例中,它归结为A.valueOf().toString(),在空数组的情况下,它就是空字符串""

因此,我们最终评估相等的"" == 0。字符串/数字==比较对字符串执行ToNumberToNumber("")0,因此我们得到0 == 0,当然是true

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51549267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档