JavaScript 数组的布尔求值

Posted

技术标签:

【中文标题】JavaScript 数组的布尔求值【英文标题】:Boolean evaluation of JavaScript arrays 【发布时间】:2013-10-02 18:29:58 【问题描述】:

前几天我遇到了一个有趣的错误。我正在测试一个数组以查看它是否评估为布尔值 false,但是直接评估它总是返回 true:

> !![]
  true

好的,所以基本上我放在那里的任何数组都会是true,对吧?我在 javascript 控制台中运行它只是为了好玩:

> [] == true
  false

这是怎么回事?

【问题讨论】:

关于这类问题,我想你会喜欢这个演讲的:destroyallsoftware.com/talks/wat 您可能想看看这个问题以获得答案:***.com/questions/5491605/… 你看过我的回答了吗? 【参考方案1】:

这与 The Abstract Equality Comparison Algorithm 与用于将值转换为布尔值的算法有关。

通过查看the spec,我们可以看到点号 9. 是唯一定义当 Type(left side value) 为 Object 时应该发生什么的点数强>。但是它指定 右侧的值必须是字符串或数字

9 .如果 Type(x) 是 Object 并且 Type(y) 是 String 或 Number, 返回比较结果 ToPrimitive(x) == y。

看着[] == true

typeof []'object',所以我们很好,但 typeof true 不是 'string''number',它是 'boolean',所以它回退到最后一条语句,点号 10。

10 .返回 false。

但是!![] 转换为!!Boolean([]),并且由于[] 是一个thruty 值(对象是),它与写!!true 相同,它返回true

【讨论】:

以上是关于JavaScript 数组的布尔求值的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript高级程序设计基本概念

第三章 基本概念(下) --《Javascript高级程序设计》

D3.js的基础部分之数组的处理 数组的排序和求值(v3版本)

Groovy学习笔记-布尔求值

Javascript - 带有布尔键的数组?

JavaScript——驰骋网页的脚本执行者