JavaScript 怪癖 - 数组递增

JavaScript Quirk - Increment on array

为什么是

++[[]][0] == 1

但是

++[]

抛出一个错误

它们不一样吗?我相信第一个示例在数组上执行 index-read,因此您可以在数组中获取数组。然后执行增量。如果是这样,为什么我不能做第二个例子?

++ 是赋值运算符。它需要一个有效的 left-hand-side 操作数(即使它可以在 ++ 的右侧)。

[] 只是一个值,不能分配给它。

[[]][0] 计算为 [] 但它是有效的左侧,因为它指向现有数组中的一个元素。这样就可以了。

举一个希望不那么令人困惑的例子:

var a = 1
1++ // throws an error
a++ // works fine

a 中的值是什么并不重要。最坏的情况下,++ 将 return NaN,永远不会出错,只要它可以分配结果。

您的示例中唯一 JavaScript 的怪癖是 +[] + 1 计算结果为 1,因为空数组被强制转换为空字符串,然后显式为零(+""0),然后添加到 1.

++ 运算符总是强制转换为数字,不像 + 会满足 ""(所以 [] + 1 变成 "" + "1")。因此,在分解 ++ 时,不要忘记将操作数强制为数字(这在您的示例中并不重要)。