[]==false
这个条件语句返回true,因为使用了抽象相等算法,如此在ECMA规范第11.9.3节中所述。
如果按照上面提到的算法运行:
在第一次迭代中,满足的条件是:
Step 7: If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
因此上述条件转化为 -> [] == 0
现在在第二次迭代中,满足的条件是[] == 0
:
Step 9: If Type(x) is Object and Type(y) is either String or Number, return the result of the comparison ToPrimitive(x) == y.
因为[]
是一个对象,将其转换为原始值后,会变成一个空字符串''
因此,上述条件转化为 -> '' == 0
在第三次迭代中,满足的条件是:
Step 5: If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y.
由于我们知道空字符串''
是一个falsy
值,因此将空字符串转换为数字会返回值0
。
因此,我们的条件将转化为 -> 0 == 0
在第四次迭代中,满足的是类型相等且数字相等的第一个条件。
因此,[] == false
的最终值缩减为0 == 0
,其结果为true。
希望这回答了你的问题。否则,你也可以参考这个youtube视频。
myCollection.length > 0
? - StevemyCollection.length > 0
提供了一个布尔值,正在做OP要求的事情...他仍然需要从那里开始努力。 - StevemyArray.length > 0
,因为如果长度为0,它将返回0,即false,如果它返回任何其他大于0的长度,则默认为true。 - Kunok