Possible Duplicate:
Can you explain why ++[[]][+[]]+[+[]] = 10
众所周知,备忘单是我们能找到完成任务的最短方法 通过使用字符集。我无法理解它是如何执行的。谁能解释一下吗?
如何"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"]
)。
如果您想阻止某人理解代码,第二个版本可以被视为混淆。但它实际上并没有多大作用,至少在日常编码生活中是这样。
关于javascript - 如何 "NaNundefined"[10] ="e"或者 ([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14646173/