在JavaScript中,[] == -[] 的结果是 true。这看起来可能有些反直觉,但可以通过以下步骤来解释:
1. 理解 -[] 的值
-
[] 是一个空数组,当它被用作数字上下文时(比如前面加一元负号 -),会被转换为数字 0
- 因此,-[] 的计算过程是:
-[] → -Number([]) → -0 → 0
2. 比较 [] == 0
-
现在比较变成 [] == 0
-
根据JavaScript的宽松相等(==)规则,如果一个操作数是对象(如 [])而另一个是数字(如 0),则对象会通过 ToPrimitive 转换为原始值
-
空数组 [] 转换为原始值时:先尝试 valueOf(),返回数组本身(不是原始值)。然后尝试 toString(),返回空字符串 ""
-
所以 [] 转换为 ""
-
现