0

重複の可能性:
++[[]][+[]]+[+[]] = 10 の理由を説明できますか

チートシートは、文字セットを使用して物事を達成するための最短の方法であることは誰もが知っていることです。それがどのように実行されているのか理解できません。誰でも明確にできますか?

どのように"NaNundefined"[10] ="e" または([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"

4

2 に答える 2

6

"NaNundefined"[10] ="e"簡単です-e文字列の11番目の文字です。

([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"少し難しいですが、簡単に分割できます。

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

2番目のバージョンは、効果的に最初のバージョンを構築する方法であり、(ab)javascript演算子の弱い型付け(たとえば)を使用します[NaN] + "" -> "NaN"。また、javascriptの配列は常に文字列によってインデックス付けされるという事実を使用します(したがって、array[10]と同等ですarray["10"])。

誰かがコードを理解するのを防ぎたい場合、2番目のバージョンは難読化と見なされる可能性があります。ただし、少なくとも日常のコーディング生活では、それは実際には多くの目的を果たしません。

于 2013-02-01T12:24:42.387 に答える