JavaScript数组的布尔评估

时间:2013-09-26 16:55:52

标签: javascript arrays boolean-expression

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

> !![]
  true

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

> [] == true
  false

这里发生了什么?

1 个答案:

答案 0 :(得分:3)

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

通过查看the spec,我们可以看到点数 9。是唯一一个定义类型(左侧值)为Object时应该发生什么的点数即可。但是,它指定右侧值必须是String或Number

  

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 }。