我的问题可能已经回答了,但我找不到搜索引擎中的谷歌或者bing不喜欢'+'(加号)登录搜索请求.
无论如何,为什么这是零
+[[]][0] // = 0
Run Code Online (Sandbox Code Playgroud)
这是一个
++[[]][0] // = 1
Run Code Online (Sandbox Code Playgroud)
UPD: Michael Berkowski有一个很好的答案,但我偷了不明白一件事
如果[[]][0]计算结果为空数组,那么,为什么++[]是ReferenceError: Invalid left-hand side expression in prefix operation
UPD2: 现在我明白了......似乎我试图在控制台中键入++ 0并获得错误,但我应该使用var a = 0; ++一个
通过分解其组件评估的方式可以最好地探索这一点.
[[]][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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |