7
alert(
    (![]+[])[[]-[]]+
    (([]+[])+([][[]]))[[]-[]]+
    (([]+[])+([][[]]))[!![]-[]]
);

ここにフィドルがあります:http://jsfiddle.net/leeny/6VugZ/

この不可解なコードはどの程度正確に機能していますか?

4

1 に答える 1

7
        vvvvvvv [0]
(![]+[])[[]-[]]                            = "false"[0]
^^^^^^^^ "false"

                  vvvvvvv again [0]
(([]+[])+([][[]]))[[]-[]]                  = "undefined"[0]
^^^^^^^^^^^^^^^^^^ "undefined"

                  vvvvvvvvv this time [1]
(([]+[])+([][[]]))[!![]-[]]                = "undefined"[1]
^^^^^^^^^^^^^^^^^^ again "undefined"

したがって、あなたは得る"f"+"u"+"n" === "fun"

詳細説明

"false"

![]ですfalse+[]単に文字列への変換として機能します。したがって、文字列を取得します"false"

"undefined"

オペランドの1つは文字列である必要があります。これはによって行われてい[]+[]ます。実際undefinedは右側に作成されます:[][[]]=== [][0]、空の配列の最初のエントリはですundefined

于 2013-03-08T20:45:32.140 に答える