Javascript控制台.log(对象)与连接字符串

Javascript控制台.log(对象)与连接字符串,javascript,node.js,string-concatenation,pretty-print,Javascript,Node.js,String Concatenation,Pretty Print,我在node.js中运行这个: > x = { 'foo' : 'bar' } { foo: 'bar' } > console.log(x) { foo: 'bar' } undefined > console.log("hmm: " + x) hmm: [object Object] undefined 我不明白的是,为什么console.log(x)会“漂亮地打印”对象,而字符串串联会“丑陋地打印”对象。更重要的是,让它打印hmm:{foo:'bar'}?+x将对象x强

我在node.js中运行这个:

> x = { 'foo' : 'bar' }
{ foo: 'bar' }
> console.log(x)
{ foo: 'bar' }
undefined
> console.log("hmm: " + x)
hmm: [object Object]
undefined

我不明白的是,为什么
console.log(x)
会“漂亮地打印”对象,而字符串串联会“丑陋地打印”对象。更重要的是,让它打印
hmm:{foo:'bar'}

+x
将对象
x
强制为一个字符串,它只是
[object object]

漂亮的打印是一个非常好而且可能非常复杂的底层代码,有人将其作为
console
对象和
log
方法的一部分来实现

试试这个:

console.log("hmm: ", x);

打印带有字符串附加的对象时,请使用
JSON.stringify

console.log("Haa"+JSON.stringify(x))

您有多种选择:

process.stdout.write('hmm: ')
console.dir(x)
另一个

var util = require('util')
process.stdout.write('hmm: ')
console.log(util.inspect(x, true, 10, true))
有关更多信息,请参阅文档

编辑:对不起,我的脑子以为我读了Node.js。这仅对Node.js有效。所以,我会把它留给任何谷歌人

Edit2:我没有疯,我只是需要睡觉。您确实编写了Node.js。我将把它添加为一个标记。

console.log函数 “console.log”是一个重载函数,它接受通过复制(字符串| number | boolean)或引用(其他所有内容)传递的参数列表

对于通过复制传递的值,通过将其转换为字符串来打印该值。
在通过引用传递值的情况下,该值会按照浏览器认为合适的方式打印出来

+运算符 加号运算符(+)重载。 当运算符的两边都是数字时,返回两个运算符的和

console.log("hmm: " + x);
如果运算符的任一侧是字符串,则两侧都将转换为字符串,并返回这两个字符串的串联

console.log("hmm: " + x);
和写作一样

console.log(String("hmm: ") + String(x));
解决方案 通过将加号(+)替换为逗号(,)来防止隐式字符串强制转换

更多信息 有关“console.log”函数的更深入描述,请参阅:

有关加号运算符(+)的详细说明,请参见:

您可以使用
console.log(JSON.stringify(yourObject))以打印对象。成功了

我喜欢这个。这让我想知道为什么更多的例子不使用
log(x,y)
形式而不是
log(x+y)
@JohnZwinck我不认为变量参数版本得到广泛支持(至少Chrome和node.js支持,但其他人可能不支持)
console.log(“嗨%s!祝您愉快!”,“John”);//嗨,约翰!祝你今天愉快我建议也链接到算术运算符的MDN页面()而不是W3。