Boolean evaluation of JavaScript arrays
前几天我遇到了一个有趣的虫子。我在测试一个数组,看它的值是否为布尔值false,但是直接计算它总是返回true:
1 2 | > !![] true |
好吧,所以基本上我放在里面的任何数组都会是
1 2 | > [] == true false |
这是怎么回事?
它和抽象的相等比较算法以及将值转换为布尔值的算法有关。
通过查看规范,我们可以看到9号点。是唯一一个定义当类型(左侧值)为对象时应该发生什么的类型。但是它指定右边的值必须是字符串或数字。
9 . If Type(x) is Object and Type(y) is either String or Number,
return the result of the comparison ToPrimitive(x) == y.
看
10 . Return false.
然而,