关于javascript:以下表达式如何评估为“10”

How does the following piece of expression evaluates to “10”

本问题已经有最佳答案,请猛点这里访问。

我最近看到一个来源的表达式,它看起来像下面这样-

1
++[[]][+[]]+[+[]]

在chrome(Windows7,版本27.0.1453.94m)控制台中输入该命令会显示"10"的结果。

有人能解释一下这里发生了什么吗?

JSFiddle。


Javascript是在数据类型之间转换的公平灵活的。首先要注意的是+[]Evaluates to 0.?The first thing to notice is that +[]evaluates to 0.*that lets us rewrite the expression as:

ZZU1

通知的下一件事是++[[]][0]是应用于[[]]第一元素的初步操作员。通常你不能在一个阵列中应用++,但Javascript kindly converts the first element to 0,结果是++[[]][0]evaluates to 1([[]]having now been incremented)。It's kind of like this:

1
2
3
var a = [[]];
var b = ++a[0];
// now a will be [1] and b will be 1

让我们与:

1
1 + [0]

Javascript now converts the int and the array to strings(since EDOCX1&15)is not a numberic value)and concatenates them together.Done!

我对如何成为+[]的理解是,这是一个两步的过程:第一步,[]是转化为一条原始的弦乐,这是空气的弦乐。空气弦转换成一个数字,这个数字是零。经由同一条路,[1]Evaluates to '1'and then to 1[2]2EDOCX1〕EValuates to [1, 2]'1,2'Which evaluates to NaN。最后,因为分隔点是.,而不是,。我不知道如果我的地方不一样会发生什么


是从阵列到0的一个数字转换。

也就是说

因此,最终的结果可以传达给(++0) + [0],这是1+[0]

并为一个数字添加一个阵列。他们正在谈论如何加强,结果实际上是10。

你可以测量


这是一个有效的表达式,它是由Yelds NaN、Numbers、Boolean undefined等构造的。

E.G.

1
2
3
+[] -> 0  //The unary plus operator is applied to the result of toString applied to an empty array (which is an empty string)

!+[] -> true

你也可以看着这个问题,在无尽的土壤上And at the no alnum cheat sheets.