关于javascript:如何“NaNundefined”[10] =“e”或([+ [] [[]]] + [] [[]])[++ [[]] [+ []] + [+ []

How “NaNundefined”[10] =“e” Or ([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = “e”?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Can you explain why ++[[]][+[]]+[+[]] = 10

我们都知道,速记表是我们能找到的最短完成任务的方法。通过使用字符集。我不能想象它是如何被执行的。有人能解释清楚吗?

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


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

([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] ="e"有点难,但你可以很容易地将其拆分:

1
2
3
4
5
6
7
[+[][[]]] -> [ NaN ]
[][[]] -> undefined
[ NaN ] + undefined ->"NaNundefined"
++[[]][+[]] -> 1
[+[]] ->"0"
1 +"0" ->"10"
"NaNundefined"["10"] ->"e"

第二个版本实际上是使用弱类型的javascript操作符(例如,[NaN] +"" ->"NaN")构造第一个(ab)的一种方法。它还使用这样一个事实:javascript中的数组总是由一个字符串索引(因此,array[10]相当于array["10"])。

如果您想阻止某人理解代码,第二个版本可能会被视为混淆。但它并没有真正起到多大作用,至少在日常的编码生活中是如此。


索引10处的字符是e:"NaNundefined"[10] ="e"