[英]JavaScript Quirk - Increment on array
为什么是
++[[]][0] == 1
但是呢
++[]
抛出错误
他们不一样吗? 我相信第一个示例在数组上执行index-read
,因此您可以在数组中获取数组。 然后执行增量。 如果是这样,为什么我不能做第二个例子?
++
是赋值运算符。 它需要一个有效的左侧操作数(即使它可以在++
的右侧)。
[]
只是一个值,不是您可以分配的值。
[[]][0]
值为 [],但它是有效的左侧,因为它指向现有数组中的一个元素。 这样行得通。
举一个希望不那么令人困惑的示例:
var a = 1
1++ // throws an error
a++ // works fine
不要紧,是在什么样的价值a
。 最坏的情况是, ++
可以返回NaN,绝不会出错,只要它可以分配结果即可。
您的示例中唯一的JavaScript古怪之处在于+[] + 1
值为1,因为将空数组强制转换为空String,然后将其显式设置为零( +""
为0
),然后将其添加到1
。
++
运算符始终强制转换为数字,这与+
会用""
满足的情况不同(因此[] + 1
变成"" + "1"
)。 因此,在分解++
,不要忘记将操作数强制为数字(并不是在您的示例中它最终很重要)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.