Javascript控制台.log(对象)与连接字符串
我在node.js中运行这个: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强
> 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。