7

我不确定这行 javascript 中发生了什么:

alert( (''+[][[]])[!+[]+!+[]] ); // shows "d"

我发现了什么:

var a = ! + []; // == true
var b = ! + [] + ! + []; // == 2

似乎第二部分是对字母数组或某种类型的引用,但我不明白这是怎么来的

(''+[][[]])

还:

alert( (''+[][])[2] ); // nothing happens; console says "unexpected token ]"
alert( (''+[[]][])[2] ); // nothing happens; console says "unexpected token ]"
alert( (''+[[]][[]])[2] ); // shows "d"
alert( (""+true)[2] ); // shows "u"
4

3 回答 3

4

我给你分解一下:

  ('' + [][[]])[!+[]+!+[]]
= ('' + undefined)[!+[]+!+[]]  // [][[]] grabs the []th index of an empty array.
= 'undefined'[! + [] + ! + []]
= 'undefined'[(! + []) + (! + [])]
= 'undefined'[true + true]
= 'undefined'[2]
= 'd'

! + [] == true在这里解释一元加号和减号运算符的重要用途是什么?

于 2012-06-17T20:37:55.753 回答
2

因为"" + true是字符串"true",第三个字符(索引 2)是u.

! + []工作之类的东西+也可以是一元运算符,请参阅此 SO question

于 2012-06-17T20:21:11.300 回答
0
alert( (""+true)[2] ); // shows "u"

它返回字符串“true”的第三个字母。

这会返回什么?

alert( (''+[[]][[]]));
于 2012-06-17T20:23:34.730 回答