前几天我遇到了一个有趣的虫子。我正在测试一个数组,看看它是否计算为布尔false,但是直接计算它总是返回true:
> !![]
true好的,基本上所有我放进去的数组都会是true,对吧?我在JavaScript控制台中运行这个只是为了好玩:
> [] == true
false这里发生什么事情?
发布于 2013-09-26 17:54:01
这与抽象等式比较算法与用于将值转换为布尔值的算法有关。
通过查看规格,我们可以看到,点号9。是唯一定义当类型(左侧值)是对象时应该发生的事情。但是,它指定右侧值必须是字符串或数字。
9.如果Type(x)是Object,Type( y )是字符串或数字,则返回比较ToPrimitive(x) == y的结果。
看着[] == true
typeof []是'object',所以我们很好,但是typeof true不是'string'或'number',它是'boolean',所以它回到了最后一个语句,点数10。
10 .还假。
但是,!![]转换为!!Boolean([]),而且由于[]是一个推力值(对象是),这与编写返回true的!!true相同。
https://stackoverflow.com/questions/19034155
复制相似问题