[] == ![]结果是什么?
== 中,左右两边都需要转换为数字然后进行比较。 []转换为数字为0。 ![] 首先是转换为布尔值,由于[]作为一个引用类型转换为布尔值为true, 因此![]为false,进而在转换成数字,变为0。 0 == 0 , 结果为true
简述过程
[] == ![] -> [] == false -> [] == 0 -> [].valueOf() == 0 -> [].toString() == 0 -> '' == 0 -> 0 == 0 -> true
详细点
[] == ![]
[] == !true // 将空数组这个对象类型转换成布尔值
[] == false // ! 运算符对 true 进行取反
'' == false // 对 [] 进行 ToPrimitive 操作,返回一个空对象
0 == 0 // 将等号两边都转换成数字类型
ToPrimitive(obj, Number) ==> Number({})
如果 obj 是基本类型,直接返回
否则,调用 valueOf 方法,如果得到原始值,则返回
否则,调用 toString 方法,如果得到原始值,则返回
否则,报错
拓展
[] == ![] [] == [] 如果类型是对象,二者引用同一个对象,返回 true,反之返回 false。 [] == false [] == 0 [] == '' [] == '0' {} == '0'