众所周知,备忘单是我们可以找到的使用字符集完成任务的最短方法。我无法理解它是如何执行的。任何人都可以澄清吗?
怎么样"NaNundefined"[10] ="e"
?([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"
众所周知,备忘单是我们可以找到的使用字符集完成任务的最短方法。我无法理解它是如何执行的。任何人都可以澄清吗?
怎么样"NaNundefined"[10] ="e"
?([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"
"NaNundefined"[10] ="e"
很简单 -e
是字符串中的第十一个字符。
([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"
有点难,但您可以轻松地将其拆分:
[+[][[]]] -> [ NaN ]
[][[]] -> undefined
[ NaN ] + undefined -> "NaNundefined"
++[[]][+[]] -> 1
[+[]] -> "0"
1 + "0" -> "10"
"NaNundefined"["10"] -> "e"
第二个版本实际上是构造第一个版本的一种方法,(ab) 使用 javascript 运算符的弱类型(例如,[NaN] + "" -> "NaN"
)。它还使用了 javascript 中的数组始终由字符串索引的事实(因此array[10]
等同于array["10"]
)。
如果您想阻止某人理解代码,则第二个版本可能被视为一种混淆。不过,它并没有真正起到多大的作用,至少在日常编码生活中是这样。
索引 10 处的字符是 e:
"NaNundefin
ed"[10] ="e"