JavaScript Quirk - 数组递增

Yen*_*heO 0 javascript increment

为什么是

++[[]][0] == 1
Run Code Online (Sandbox Code Playgroud)

但确实

++[]
Run Code Online (Sandbox Code Playgroud)

抛出错误

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

Tou*_*ffy 5

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

[] 只是一个值,而不是你可以分配的东西。

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

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

var a = 1
1++ // throws an error
a++ // works fine
Run Code Online (Sandbox Code Playgroud)

中的值无关紧要a。最坏的情况,++将返回 NaN,永远不会出错,只要它可以分配结果。

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

++运营商总是要挟到数字,不像+这将与满足""(所以[] + 1转成"" + "1")。因此,在分解 a 时++,不要忘记强制操作数编号(这在您的示例中最终并不重要)。