如何“NaNundefined”[10] =“e”或([+ [] [[]]] + [] [[]])[++ [[]] [+ []] + [+ []]] = “E”?

时间:2013-02-01 12:19:19

标签: javascript

  

可能重复:
  Can you explain why ++[[]][+[]]+[+[]] = 10

众所周知,作弊表是我们找到完成任务的最短途径 通过使用charsets。我无法理解它是如何被执行的。任何人都可以澄清吗?

"NaNundefined"[10] ="e"([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"的方式?

2 个答案:

答案 0 :(得分:6)

"NaNundefined"[10] ="e"很简单 - e是字符串中的第11个字符。

([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"有点困难,但您可以轻松地将其拆分:

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

第二个版本实际上是一种使用javascript运算符的弱类型构造第一个(ab)的方法(例如,[NaN] + "" -> "NaN")。它还使用了javascript中的数组始终用字符串索引的事实(因此array[10]等同于array["10"])。

如果您想阻止某人理解代码,则可以将第二个版本视为混淆。然而,它至少在日常编码生活中并没有真正发挥作用。

答案 1 :(得分:0)

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