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"

其中一个操作数必须是字符串。这是由[]+[]. 实际undefined在右侧创建:[][[]]=== [][0],空数组的第一个条目是undefined.

于 2013-03-08T20:45:32.140 回答