为什么 [ ] == false 而 !![ ] == true


[] == false 的比较是对 x 执行 ToPrimitive(x),然后和 ToNumber(false) (为 0)进行比较
ToPrimitive([ ]),先执行 [].valueOf(),返回 result 的是 [ ],因为 Type(result) 是 Object,所以继续执行 [].toString(),返回 ""。
因此实际上最终是比较 "" == 0。

!![] == true:
按照优先级,先执行 !![],根据规范,实际上是 !!(ToBoolean([])):
ToBoolean([]) 被转成 true

[1] == [1] // false,因为没有经过类型转换