3

我的问题可能已经得到解答,但我在搜索引擎 google 或 bing 不喜欢“+”(加号)登录搜索请求中找不到它。

无论如何,为什么这是零

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

这是一个

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

UPD: 迈克尔·伯科夫斯基有一个很好的答案,但我偷不明白一件事

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

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

4

1 回答 1

8

最好通过分解其组件的评估方式来探索这一点。

[[]][0]单独计算为空数组[]。通过+在前面添加,您可以通过一元正运算符 将其字符串表示形式转换为整数 0(例如说+4or )。只是。-3+00

++作为数字运算符,也将空字符串转换为整数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
于 2012-11-25T20:27:19.333 回答