JavaScript Quirk - 数组递增

时间:2015-09-30 08:31:17

标签: javascript increment

为什么

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

但是

++[]

抛出错误

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

1 个答案:

答案 0 :(得分:4)

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

[]只是一个值,而不是您可以指定的值。

[[]][0] 评估为[],但它是一个有效的左侧,因为它指向现有数组中的元素。这样才有用。

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

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

a中的价值并不重要。最糟糕的情况是,++将返回NaN,永远不会出错,只要它可以分配结果。

您的示例中唯一的JavaScript怪癖是+[] + 1求值为1,因为空数组被强制转换为空String,然后显式为零(+""0),然后添加到1

++运算符始终强制为数字,与+不同,后者会对""感到满意(因此[] + 1变为"" + "1")。因此,在分解++时,不要忘记强制操作数进行编号(而不是最终在您的示例中重要)。