为什么
++[[]][0] == 1
但是
++[]
抛出错误
Aren他们一样吗?我相信第一个示例在数组上执行index-read
,因此您可以获得数组中的数组。然后执行增量。如果是这样,为什么我不能做第二个例子呢?
答案 0 :(得分:4)
++
是一个赋值运算符。它需要一个有效的左侧操作数(即使它可以在++
的右侧)。
[]
只是一个值,而不是您可以指定的值。
[[]][0]
将评估为[],但它是一个有效的左侧,因为它指向现有数组中的元素。这样才有用。
给出一个希望不那么令人困惑的例子:
var a = 1
1++ // throws an error
a++ // works fine
a
中的价值并不重要。最糟糕的情况是,++
将返回NaN,永远不会出错,只要它可以分配结果。
您的示例中唯一的JavaScript怪癖是+[] + 1
求值为1,因为空数组被强制转换为空String,然后显式为零(+""
为0
),然后添加到1
。
++
运算符始终强制为数字,与+
不同,后者会对""
感到满意(因此[] + 1
变为"" + "1"
)。因此,在分解++
时,不要忘记强制操作数进行编号(而不是最终在您的示例中重要)。