0

可能重复:
你能解释为什么 ++[[]][+[]]+[+[]] = 10

众所周知,备忘单是我们可以找到的使用字符集完成任务的最短方法。我无法理解它是如何执行的。任何人都可以澄清吗?

怎么样"NaNundefined"[10] ="e"([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"

4

2 回答 2

6

"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"])。

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

于 2013-02-01T12:24:42.387 回答
0

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

于 2013-02-01T12:23:14.603 回答