2012-06-17 3 views
7

Ich bin mir nicht sicher, was in dieser Zeile Javascript passiert:Wie wird ein Array in eine leere Zeichenfolge referenziert + ein gültiges Zeichen in JavaScript?

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

Was ich habe herausgefunden:

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

Es scheint, dass der zweite Teil eine Referenz in eine Anordnung von ist Buchstaben oder eine Art, aber ich verstehe nicht, wie das von

(''+[][[]]) 

auch kommt:

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" 
+0

Nun, das ist eine echte Frage ... – gdoron

+2

Siehe auch: https: //www.destroyallsoftware. com/talks/wat – Hamish

+0

Auch von Interesse: http://utf-8.jp/public/jjencode.html – josh3736

Antwort

4

Ich werde es für Sie zersetzen:

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

! + [] == true erklärt hier What's the significant use of unary plus and minus operators?

2

Da "" + true die Zeichenfolge "true" ist und das dritte Zeichen (Index 2) u ist.

Dinge wie ! + [] arbeiten, weil + auch ein unärer Operator sein kann, siehe this SO question.

+3

und das 'd' ist das 3. Zeichen von' undefined'. –

0
alert((""+true)[2]); // shows "u" 

Es gibt den 3. Buchstaben der Zeichenfolge "True" zurück.

Was bedeutet das?

alert((''+[[]][[]])); 
Verwandte Themen