MD *_*med 7 javascript expression
我最近看到一个来自某个来源的表达式,看起来如下所示 -
++[[]][+[]]+[+[]]
Run Code Online (Sandbox Code Playgroud)
在Chrome(Windows 7,版本27.0.1453.94 m)控制台中输入此内容即可显示结果"10".
有人能解释一下这里发生了什么吗?
JavaScript 在数据类型之间的转换方面相当灵活。首先要注意的是+[]计算结果为 0。*这让我们可以将表达式重写为:
++[[]][0] + [0]
Run Code Online (Sandbox Code Playgroud)
接下来要注意的是++[[]][0]应用于 的第一个元素的预自增运算符[[]]。通常,您不能应用于++数组,但 JavaScript 会善意地将第一个元素转换为0,因此结果是++[[]][0](1第一个元素[[]]现已递增)。它有点像这样:
var a = [[]];
var b = ++a[0];
// now a will be [1] and b will be 1
Run Code Online (Sandbox Code Playgroud)
这给我们留下了:
1 + [0]
Run Code Online (Sandbox Code Playgroud)
JavaScript 现在将 int 和数组转换为字符串(因为[0]不是数值)并将它们连接在一起。完毕!
*+[]我对如何变成的理解0是,它是一个两步过程:首先,[]转换为原始字符串,即空字符串。然后空字符串转换为数字,该数字为零。通过相同的路线,[1]评估为'1',然后评估为1,[2]评估为2,等等。但是,[1, 2]评估为'1,2',评估为NaN。(最后一个是因为小数点分隔符是.,而不是,。我不知道如果我的区域设置不同会发生什么。)
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |