我的问题可能已经得到解答,但我找不到搜索引擎中的谷歌或者bing不喜欢'+'(加号)登录搜索请求。
无论如何,为什么这是零
+[[]][0] // = 0
,这是一个
++[[]][0] // = 1
UPD: Michael Berkowski有一个很好的答案,但我偷了不明白一件事
如果[[]][0]
评估为空数组,那么为什么++[]
为ReferenceError: Invalid left-hand side expression in prefix operation
UPD2: 现在我明白了......似乎我试图在控制台中键入++ 0并获得错误,但我应该使用var a = 0; ++一个
答案 0 :(得分:8)
最好通过打破其组件评估方式来探索。
[[]][0]
单独评估空数组[]
。通过在前面添加+
,您可以通过一元正算子将其字符串表示形式转换为整数0(如说+4
或-3
)。 +0
只是0
。
++
作为数字运算符,也会将空字符串转换为整数0
,但会应用其操作(前缀增量),从而生成1
。
[[]][0]
// [] empty array
[[]][0].toString()
// ""
// Unary + casts the empty string to an integer
+("")
// 0
// Prefix increment on an empty string results in 1 (increments the 0)
var emptyString = "";
++emptyString;
// 1