7

このJavaScriptの行で何が起こっているのかわかりません:

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

私が考え出したこと:

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

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"3 番目の文字 (インデックス 2) はuです。

単項演算子にすることもできる! + []ため、仕事のようなものは、この SO questionを参照してください。+

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

文字列「true」の3番目の文字を返します。

これは何を返しますか?

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