本当に面白い言語だよJSは。
Conversation
Notices
-
[ニューウェーブ]硫酸鶏 (ac@imastodon.net)'s status on Friday, 08-Feb-2019 18:51:19 JST [ニューウェーブ]硫酸鶏 - 上風連 repeated this.
-
[ニューウェーブ]硫酸鶏 (ac@imastodon.net)'s status on Friday, 08-Feb-2019 18:55:14 JST [ニューウェーブ]硫酸鶏 [[][[]]+[]][+[]][+[]]
をまず
_=[][[]];[_+[]][+[]][+[]]
という感じに分けて考えます。
[]は空の配列を生成し、後続の[[]]がこれに対して[]をキーとしてアクセスするので、当然undefinedになります。よって
[undefined+[]][+[]][+[]]
という感じになります。ここで
undefined+[]
ですが、両辺がNumberでないためにtoStringが暗黙的に呼び出され文字列結合されます。ただしArray.prototype.toStringはArray.prototype.joinと等価の結果を返すため、空の配列から得られる文字列は空文字列となります。よって
['undefined'][+[]][+[]]
という感じになります。更にここで
+[]
ですが、接頭につく+は空文字列を0に変換する効能を持つため、空配列が文字列化された上で0になります。よって
'undefined'[+[]]
となり、'undefined'という文字列の0番目にアクセスするため
'u'
となります。
上風連 repeated this.