为什么
++[[]][0] == 1
但是确实如此
++[]
抛出错误
它们不是一样的吗?我相信第一个示例在数组上执行索引读取,以便您在数组中获取数组。然后执行增量。如果是这样,为什么我不能做第二个例子?
最佳答案
++
是赋值运算符。它需要一个有效的左侧操作数(即使它可以位于++
的右侧)。
[]
只是一个值,而不是您可以分配的内容。
[[]][0]
评估为[],但它是有效的左侧,因为它指向现有数组中的元素。这样就可以了。
举一个希望不那么令人困惑的例子:
var a = 1
1++ // throws an error
a++ // works fine
a
中的值是什么并不重要。最坏的情况下,++
将返回 NaN,只要它可以分配结果,就不会出现错误。
示例中唯一的 JavaScript 怪异之处是 +[] + 1
的计算结果为 1,因为空数组被强制转换为空字符串,然后显式为零 (+""
是 0
),然后添加到 1
。
++
运算符始终强制转换为数字,与 +
不同,+
可以满足 ""
(因此 [] + 1
变为 ""+ "1"
)。因此,在分解 ++
时,不要忘记强制操作数进行编号(这在您的示例中并不重要)。
关于JavaScript Quirk - 数组增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32861426/