参见英文答案 >
Why does ++[[]][+[]]+[+[]] return the string “10”?8个
解释为什么[] == 0在Javascript中输出’true’?
解释为什么[] == 0在Javascript中输出’true’?
请检查示例.
+[] == 0 ? alert(true) : alert(false);
并检查.
‘1 [[]]’输出’10’
解决方法
它将如下评估,
1:[] == 0 – > “”== 0
运算符的数量为highest priority而非==因此将首先进行评估.因此,在将数组转换为数字时,将通过将其作为参数传递来调用ToPrimitive()
函数.由于[]是一个对象,它将返回“”字符串
2:“”== 0 – > 0 == 0
一个空字符串将被转换为0.并且非空字符串将被转换为NaN,我们都知道.
3:0 == 0 – >真正
最后根据abstract equality comparison algorithm,当两个相同类型的操作数进行比较时,不会进行进一步的评估,它将直接检查其相等性并返回结果.
在你的第二个案例1 [[]]中,评估会发生,如,
1:1 [[]] – ([]将首先转换为原始,因为[]它是一个对象)
2:1 [“”](toPrimitive([])
将是“”)
3:1 [0](将空字符串转换为数字时将产生0)
4:1“0”(toPrimitive([0])
将为“0”)
5:“10”