どうして+[][]+[]+[+[]=10?

1448 ワード

まず、この問題を聞いた人は天才です.彼はどうしてこのような問題に出会いますか?その次に、この問題に答える人は更に天才で、彼がこの問題に答えるとは想像できません.さらに想像しにくいのは、彼の答えはこのような詳細かつ充実していて、本当に飽きないと言えます.
この問題にあった以上、私たちも一緒に改善してもいいです.
これはJavascript言語の問題です.完全に有効な等式です.自分を信じないなら試してみてもいいです.次は高人の題解を見てみます.
++[[]][+[]]+[+[]]
この表現を分割すると、これは同じです.
++[[]][+[]]
+
[+[]]
JavaScriptにおいて、+[] === 0 まったく正しいです.いくつかの文字を数字に変換します.ここでは、この式は+になります.
したがって、簡単に(++は+より高い優先度)できます.
++[[]][0]
+
[0]
何故なら  [[]][0] 取得するという意味です.  [[]] の最初の要素については、次のような結果が得られます.
  • [[]][0] 内部配列()を返します.言語の規範によって、私達は言います.  [[]][0] === [] 正しくないですが、この内部配列をAと呼びます.間違った書き方を避けるために.
  • ++[[]][0] == A + 1は+の意味は「プラス」です.
  • ++[[]][0] === +(A + 1);つまり、あなたが得たのは常に数値です.
  • 同様に、私たちはこの一連のコードをより明確に簡略化することができます.Aを元に戻しましょう. :
    +([] + 1)
    +
    [0]
    JavaScriptでは、これも正しいです.[] + 1 === "1"です.  [] == "" (これは空の配列の内部要素接続に相当します.)
    +([] + 1) === +("” + 1),   
    +("” + 1) === +("1"),   
    +("1") === 1 
    もう一度簡略化しましょう.
    1
    +
    [0]
    同様に、Javascriptでは、これは正しい:[0] == "0"、これは1つの要素がある配列に相当する内部要素の接続です.各要素は使用され、分離されます.要素が一つしかない時、このプロセスの結果はその自身の最初の要素であると推論できます.
    したがって、最終的には(数字+文字列=文字列)を取得します.
    1
    +
    "0"
    
    === "10" //  !
    もっと詳しい情報が知りたいなら、ここを訪問してください.