JavaScript数组的布尔评估

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

> !![]
  true

好吧,基本上,我放在那里的任何阵列都是true无论如何,对吧? 我在JavaScript控制台中运行它仅仅是为了好玩:

> [] == true
  false

这里发生了什么?


它与“抽象平等比较算法”与用于将值转换为布尔值的算法有关。

通过查看规范,我们可以看到,第9个点是定义当Type(左侧值)为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

链接地址: http://www.djcxy.com/p/72865.html

上一篇: Boolean evaluation of JavaScript arrays

下一篇: Why does "true" == true show false in JavaScript?