2013-02-01 31 views
0

可能重複:
Can you explain why ++[[]][+[]]+[+[]] = 10「NaNundefined」[10] =「e」或([+ [] [[]]] + [] [[]])[++] [[]] [+ []] + [+]]] =「e」?

正如我們都知道,備忘單是我們可以發現,通過使用字符集來完成的事情 最短途徑。我不知道它是如何被執行的。任何人都可以澄清?

如何"NaNundefined"[10] ="e"([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"

+0

對不起,但我很難理解你在這裏問的究竟是什麼...... – Lix

+3

''NaNundefined「[10]'是指該字符串的第11個字符,它是''e」'。 '([+ [] [[]]] + [] [[]])只是混淆了生成NaNundefined和'++ [[]] [+ []] + [+ [] ]'生產'10'也是一樣的。但我不確定這個問題的目的是什麼。 – Jon

回答

0

的字符在索引10是e: "NaNundefinËd"[10] ="e"

+2

這是字符串中的第二個'e' – detaylor

5

"NaNundefined"[10] ="e"很容易 - e是字符串中的第十一炭。

([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"是有點困難,但你可以很容易地只把它分解了:使用JavaScript運營商的弱類型(

[+[][[]]] -> [ NaN ] 
[][[]] -> undefined 
[ NaN ] + undefined -> "NaNundefined" 
++[[]][+[]] -> 1 
[+[]] -> "0" 
1 + "0" -> "10" 
"NaNundefined"["10"] -> "e" 

第二個版本是有效構建第一的方式,(AB)爲例如,[NaN] + "" -> "NaN")。它還使用了javascript中的數組總是以字符串索引(因此array[10]相當於array["10"])。

如果您想阻止某人瞭解代碼,則可以將第二個版本視爲混淆。儘管如此,至少在日常的編碼生活中,它並沒有真正起到很大的作用。