alert(
(![]+[])[[]-[]]+
(([]+[])+([][[]]))[[]-[]]+
(([]+[])+([][[]]))[!![]-[]]
);
这是小提琴:http: //jsfiddle.net/leeny/6VugZ/
这段神秘的代码究竟是如何工作的?
alert(
(![]+[])[[]-[]]+
(([]+[])+([][[]]))[[]-[]]+
(([]+[])+([][[]]))[!![]-[]]
);
这是小提琴:http: //jsfiddle.net/leeny/6VugZ/
这段神秘的代码究竟是如何工作的?
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
.