为什么逗号','和加'+'以不同的模式记录控制台输出?

brk*_*brk 18 javascript

我使用console.log语句进行调试,但是遇到了一个使用','或'+'和console.log语句以不同模式记录输出的情况.例如

(function() {
  var x = [];
  x.push({
    a: 1,
    b: 2,
  }, {
    a: 4,
    b: 3,
  }, {
    a: 5,
    b: 6
  }, {
    a: 7,
    b: 8,
  })
  console.log('Logging with , ', x);
  console.log('Logging with + ' + x);
}())
Run Code Online (Sandbox Code Playgroud)

当我使用','和console.log时,我看到输出为

Logging with ,  [Object, Object, Object, Object]
Run Code Online (Sandbox Code Playgroud)

并且每个这个对象都是可扩展的.但是用'+'我看到输出为

Logging with + [object Object],[object Object],[object Object],[object Object]
Run Code Online (Sandbox Code Playgroud)

为了演示,我创建了这个jsfiddle.

你能帮我理解为什么我们看到这种差异.

Tus*_*har 31

+(字符串连接运算符)与对象将调用对象上的toString方法,并返回一个字符串.所以,'' + object相当于object.toString().并toString在对象返回"[object Object]".

,该对象作为单独的参数传递给传递日志方法.


小智 7

通过Tushar的回答中的例子,可能更清晰(或冗长)地添加一些内容:

关于连接(不包括console.log()东西)使用+运算符.您使用逗号的原因console.log()是因为函数采用的参数是可变数量的参数.

所以如果你这样做 console.log('a' + 'b'),你会得到 ab

但是,如果你做console.log('a' , 'b')a b

现在,如果你做console.log('a' + {a : 'a'})a[object Object]这是不是很实用,

如果你这样做,console.log('a' , {a : 'a'})你会得到一个a {a: 'a'}

因此,逗号将对象作为使用该对象的参数传递toString(),这是最好的console.log().

  • 你的最后一行实际上是错误的。应该是_“所以,逗号将对象作为参数传递,它使用内部魔法来如此精美地显示该对象。”_ (2认同)