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()

{} + []{}被解析为块,而在后两种情况下,它被解析为对象作为表达式的一部分。

console.log()这可以通过设置或不var a = {} + []设置a到对象的事实来证明。

您可以通过简单地添加括号(使其成为表达式)来进一步简化后两种情况:

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