Javascript编译器行为 - 对于空数组和零数组的数组加倍是.. ONE

时间:2012-11-25 20:24:54

标签: javascript

我的问题可能已经得到解答,但我找不到搜索引擎中的谷歌或者bing不喜欢'+'(加号)登录搜索请求。

无论如何,为什么这是零

+[[]][0] // = 0

,这是一个

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

UPD: Michael Berkowski有一个很好的答案,但我偷了不明白一件事

如果[[]][0]评估为空数组,那么为什么++[]ReferenceError: Invalid left-hand side expression in prefix operation

UPD2: 现在我明白了......似乎我试图在控制台中键入++ 0并获得错误,但我应该使用var a = 0; ++一个

1 个答案:

答案 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