这是有效的,并在JavaScript中返回字符串“10”(此处有更多示例):
控制台日志(++[[]][+[]]+[+[]])
为什么?这里发生了什么?
这是有效的,并在JavaScript中返回字符串“10”(此处有更多示例):
控制台日志(++[[]][+[]]+[+[]])
为什么?这里发生了什么?
当前回答
++[ [] ][+[]] === 1+[] === 0++[ [] ][0] === 1[+[]]是[0]
然后我们有一个字符串连接:
1+字符串([0])==10
其他回答
++[ [] ][+[]] === 1+[] === 0++[ [] ][0] === 1[+[]]是[0]
然后我们有一个字符串连接:
1+字符串([0])==10
+[]计算结果为0[…]然后将其与任何东西相加(+运算),将数组内容转换为由逗号连接的元素组成的字符串表示。
任何其他的东西,比如数组的索引(比+操作的优先级更高)都是有序的,没有什么有趣的。
一步一步,+将值转换为数字,如果您添加到空数组+[]。。。因为它是空的并且等于0,所以它将
从那里开始,现在看看你的代码,它是++[[]][+[]]+[+[]]。。。
它们之间有一个加号++[]][+[]]+[+[]]
因此,这些[+[]]将返回[0],因为它们有一个空数组,在另一个数组中转换为0。。。
如图所示,第一个值是一个二维数组,其中有一个数组。。。因此[[]][+[]]将等于[[]][0],后者将返回[]。。。
最后++将其转换为1。。。
所以你可以想象,1+“0”将是“10”。。。
这一个评估结果相同,但有点小
+!![]+''+(+[])
[]-是在对数组进行加法或减法时转换为0的数组,因此+[]=0![]-计算结果为false,因此!![]计算结果为true+!![]-将true转换为计算结果为true的数值,因此在本例中为1+“”-将空字符串附加到表达式,使数字转换为字符串+[]-计算结果为0
因此其计算结果为
+(true) + '' + (0)
1 + '' + 0
"10"
现在你明白了,试试这个:
_=$=+[],++_+''+$
让我们简单一点:
++[[]][+[]]+[+[]] = "10"
var a = [[]][+[]];
var b = [+[]];
// so a == [] and b == [0]
++a;
// then a == 1 and b is still that array [0]
// when you sum the var a and an array, it will sum b as a string just like that:
1 + "0" = "10"