5

重複の可能性:
CodeMash 2012 の「Wat」トークで言及されたこれらの奇妙な JavaScript 動作の説明は何ですか?

入力すると

{} + []

Google Chrome JavaScript コンソールで、

0

結果として。ただし、入力すると

Function("return {} + []")()

私は得る

"[object Object]"

結果として。一方は他方の単なるラッパーであるため、両方の操作が同じ結果を返すはずだと思います。異なる結果が返されるのはなぜですか?

4

1 に答える 1

9

主な理由は、式のコンテキストと{}ステートメントのコンテキストでは異なることを意味することです。{ statement0; statement1 }({ "property": value, ... })

 {} + []

はブロックで単項比較演算子なので、

{}  // An empty block of statements.
(+ [])  // Use of prefix operator +.

もう 1 つは、次のように 2 つのオブジェクトを連結するプラス演算子の使用です。

return String({}) + String([])

Array.prototype.toStringコンマで配列を結合するため、次のようになります

return String({}) + [].join(",")

これは

return "[Object object]" + "";

そして最後に

return "[Object object]"
于 2012-08-13T21:26:51.943 に答える