JSコンソールを開いて[] + {} === {} + []
と入力すると、それが正しいことがわかります。[] + {} === {} + []はなぜ本当ですか?
これはなぜわかりません。私はそれがどのように解析されているかを調べようとしました。
[] + {}
については、+
は加算演算子です。これは、被演算子が両方のリテラルであるためです。 LHSが.valueOf()
を通して数が得られないので、それは私たち""
{}
空コードブロックであり、「無視」さ{} + []
について+ "[object Object]"
を与える両方のオペランドに.toString()
を使用して文字列の連結を行い、+
オペレータはこことして解析され単項プラス演算子では、そのオペランドを数値に変換します。数字に変換された空の配列0
これは確かに間違っているはずです"[object Object]" === 0
が表示されますか?
ID演算子は、2つのオペランドが型変換なしで等しいかどうかをチェックします。これがどうして真実になるのか分かりません。話のどの部分が欠落していますか?
編集:私はあなたが({} + [])
を入力した場合、それはRHSに等しい「[オブジェクトのオブジェクト]」を作り、空のオブジェクトとしてそれを解析して表示さ
。私はこれを見て、()
はグループ化演算子です。だからおそらくこれはこれと関係がありますか?
これはWhat is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wat' talk for CodeMash 2012?の複製ではありません。答え箇条書き1 === 2は真実であってはならない。
http://stackoverflow.com/questions/9032856/what-is-the-explanation-for-these-bizarre-javascript-behaviours-mentioned-in-the And http://stackoverflow.com/questions/36438034/why-not-no-longer-nan-in-chrome-console – epascarello
空のオブジェクトパラメータはオブジェクトコンストラクタも返す== 'true'また空の配列も真を返すコンストラクタオブジェクトです – Dennisrec
' {} 'はできません'==='の直後に来て(そして '[] + {} ==='はそれ自身では有効な文ではないので)空のブロックとして解釈される可能性があります。 – Frxstrem