为什么[] == ![]为true?

62 阅读1分钟

在 JavaScript 中,[] == ![] 的值是 true。这个结果可能有些出乎意料,但可以通过以下步骤来解释:

1、因为的优先级高于==,先转换![]

  • []布尔上下文中被视为 true,![]false

2、转换 [] == false

  • 根据抽象相等比较规则,当比较一个对象(或数组)和一个布尔值时,布尔值会被转换为数字:false 转为 0true 转为 1
  • 所以,比较变成了 [] == 0

3、转换 [] == 0

  • 当对象与数字进行比较时,对象会尝试通过调用其 valueOf() 方法(如果没有 valueOf() 方法或者 valueOf() 方法返回的不是基本值,则尝试 toString() 方法)来转换为一个原始值。
  • 空数组的 toString() 方法返回空字符串 ""

4、转换 "" == 0

  • ""和数字 0 进行比较时,""会转换为数字 0
  • 因此,比较变成了 0 == 0

5、比较 0 == 0:结果为true