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
。