==是相等操作符,先转换再比较;===是全等操作符,仅比较不转换。
[] == false 解析
右侧布尔值很简单,直接转换成 0
[] 不是基本数据类型,它是对象,所以需要调用 valueOf 方法(Array.prototype.valueOf() ,但是 Array 没有实现 valueOf 方法,所以根据原型链,最终调用的是 Object.prototype.valueOf):
[].valueOf():得到的仍然是 [] ,继续调用 toString 方法(Array.prototype.toString()):
[].toString():得到""
““作为基本数据类型直接调用 Number(””) 得到 0
所以最终结果是 true
!![] == true
!! 比 == 的优先级更高,所以先看 !![]:
![] 得到 false (操作数是对象的话逻辑非返回 false),然后再取非,得到 true
很明显,true == true 得到的结果是 true