[]==![] // true
首先[]转换为Boolean值为true
除了 "" 0 NAN null undefined 转为为布尔为false,其他都为true;
根据运算符优先级 !大于== 所以先执行![] 给[]取反 为false
相当于 false==[] 根据js隐式转换: 对象与布尔值比较时先转换为字符串,然后再转换为数字,布尔值直接转换为数字再进行比较
[]转换为""然后再转换为数字0 false转为0 所以false==[]为ture
[]==false //true
![]==false //true
最后注意点: 对象的布尔转换规则
所有对象的布尔值都是true,甚至连false对应的布尔对象也是true 空对象{}和空数组[]也会被转为true
Boolean(new Boolean(false))// Boolean对象会转成true
Boolean([]) // 空数组会转成true
Boolean({}) // 空对象会转成true