在 JavaScript 中,[] == ![] 的值是 true。这个结果可能有些出乎意料,但可以通过以下步骤来解释:
1、因为!的优先级高于==,先转换![] :
[]布尔上下文中被视为true,![]为false
2、转换 [] == false:
- 根据抽象相等比较规则,当比较一个对象(或数组)和一个布尔值时,布尔值会被转换为数字:
false转为0,true转为1。 - 所以,比较变成了
[] == 0
3、转换 [] == 0:
- 当对象与数字进行比较时,对象会尝试通过调用其
valueOf()方法(如果没有valueOf()方法或者valueOf()方法返回的不是基本值,则尝试toString()方法)来转换为一个原始值。 - 空数组的
toString()方法返回空字符串""。
4、转换 "" == 0:
""和数字0进行比较时,""会转换为数字0- 因此,比较变成了
0 == 0