1

[] + [] で空の文字列が返される理由などは、変更できないため、質問したくありません。その理由は、言語の設計にすぎません。

私の質問は、Chrome および FF Firebug JS コンソールで気づいた次の矛盾についてです。

{} + []; // outputs 0
console.log({} + []); // outputs [object Object]
var c = {} + [];
console.log(c); // outputs [object Object]

式が値を返すことを理解しています。これがコンソール出力に表示されるものです。しかし、を使用して変数または出力に代入すると、なぜこの戻り値が変化するのconsole.log()でしょうか?

言及されたコンソールにバグがあるということですか?

これがそれが行われた方法であると述べるよりも良い説明はありますか?

4

2 に答える 2

4

最初の例では、これは単なるブロックであるため、次のコードを実行するのと同じです (配列リテラルの前のプラスはそれを数値に変換します)。

{};
+[]; // 0

ただし、console.log コードでは式と見なされるため、実際にはオブジェクト リテラルです。関数には式しか渡せないので、これは同じです。

function a(b) {return b;}
a({}+[]); // "[object Object]"

加算演算はそれらを文字列に変換するため、"[object Object]".

于 2013-05-15T01:30:20.633 に答える
3

とは関係ありませんconsole.log()

ではブロックとして解析されますが、次の 2 つのケースでは式の一部としてオブジェクトとして解析されます{} + []{}

これは、オブジェクトに設定するconsole.log()かどうかによって明らかになります。var a = {} + []a

括弧を追加するだけで、2 番目の 2 つのケースをさらに単純化できます (式になります)。

({} + [])  //=> "[object Object]"
于 2013-05-15T01:32:41.237 に答える