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高级程序设计》