首先我们知道 [] 和 false 一个是对象, 一个是布尔值, 类型不同, 需要类型转换再做比较
要注意, JS 中规定, 如果 == 中有布尔值, 只能转换为数字, 那为什么不是转换成字符串呢?..., 也就是 Bool 属于一种 Int
所以此问题可以转换成: 为什么 [] == 0?..., 毕竟 Java 中的 NaN 也不能等于自身
隐式转换的恶果
NaN 不能等于自身是隐式转换最大的恶果
你可以尝试如下操作
[1, 2, NaN].indexOf(NaN) // -1 [1, 2..., NaN].includes(NaN) // true
有比较的地方, 就会有 NaN 特殊处理, 否则就是不严谨
简单逻辑复杂化, 说的就是你 NaN, 可以说 “隐式转换一时爽”~
为什么 null...要是能转的话确实要转, 但 null 和数字0本身已经是 Primitive 了, 没有机会再走一遍 toPrimitive(), 因此等号两边始终无法转换成同类型, 只能返回 false
为什么 null