This question already has answers here:
Why does ++[[]][+[]]+[+[]] return the string “10”?
(9个答案)
3年前关闭。
我最近从某个来源看到了一个表达式,如下所示-
将其输入Chrome浏览器(Windows 7,版本27.0.1453.94 m)会显示
有人可以解释这里发生了什么吗?
JSFiddle。
接下来要注意的是,
这给我们留下了:
JavaScript现在将int和数组转换为字符串(因为
*我对
(9个答案)
3年前关闭。
我最近从某个来源看到了一个表达式,如下所示-
++[[]][+[]]+[+[]]
将其输入Chrome浏览器(Windows 7,版本27.0.1453.94 m)会显示
"10"
的结果。有人可以解释这里发生了什么吗?
JSFiddle。
最佳答案
JavaScript在数据类型之间进行转换非常灵活。首先要注意的是+[]
的值为0。*这使我们将表达式重写为:
++[[]][0] + [0]
接下来要注意的是,
++[[]][0]
是应用于[[]]
的第一个元素的预增量运算符。通常,您不能将++
应用于数组,但JavaScript会将第一个元素转换为0
,因此结果是++[[]][0]
的计算结果为1
(现在[[]]
的第一个元素已增加)。有点像这样:var a = [[]];
var b = ++a[0];
// now a will be [1] and b will be 1
这给我们留下了:
1 + [0]
JavaScript现在将int和数组转换为字符串(因为
[0]
不是数字值)并将它们连接在一起。做完了!*我对
+[]
如何变成0
的理解是,这是一个两步过程:首先,将[]
转换为字符串基元,即空字符串。然后,空字符串将转换为数字,该数字为零。通过相同的路线,[1]
评估为'1'
,然后评估为1
,[2]
评估为2
,等等。但是,[1, 2]
评估为'1,2'
,其评估为NaN
。 (最后一个原因是小数点分隔符是.
,而不是,
。我不知道如果我的区域设置不同会发生什么。)08-19 10:05