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