How "NaNundefined"[10] ="e" Or ([+[][[]]

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

本文关键字:quot Or NaNundefined How      更新时间:2023-09-26

可能的重复项:
你能解释一下为什么++[[]][+[]]+[+[]] = 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"] )。

第二个版本可以被视为混淆,如果你想阻止某人理解代码。不过,它并没有多大用处,至少在日常编码生活中是这样。

索引

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