首先我们知道 [] 和 false 一个是对象, 一个是布尔值, 类型不同, 需要类型转换再做比较
要注意, JS 中规定, 如果 == 中有布尔值, 只能转换为数字, 那为什么不是转换成字符串呢?...字符串和数字比较会把字符串转换成数字
问题来了, 为什么不是把数字转换成字符串呢? 从设计者的角度可能会这样想
都转成数字能处理的复杂场景更多, 容错性更高!...我们不妨来看看 ‘abc’ == NaN 做比较的过程
因为 NaN 也是数字类型, 所以我们需要把 ‘abc’ 转换为数字
‘abc’ == NaN 相当于 Number(‘abc’) == NaN...要是能转的话确实要转, 但 null 和数字0本身已经是 Primitive 了, 没有机会再走一遍 toPrimitive(), 因此等号两边始终无法转换成同类型, 只能返回 false
为什么 null...和上面的问题一样, null 和 undefined 都是 Primitive, 而且也不是字符串或者数字, 转无可转
但 JS 专门规定了 null == undefined 就是返回 true, 属于一种专门的特殊情况