Javascript的console.log(对象)与连接string

我在node.js中运行这个:

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

我不明白的是为什么console.log(x) “漂亮的打印”的对象,而string连接“丑 – 打印”它。 更重要的是,什么是最好的方式来打印hmm: { foo: 'bar' }

+ x将对象+ x强制为一个string,这只是[object Object]

http://jsfiddle.net/Ze32g/

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

尝试这个:

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

console.log函数

'console.log'是一个重载的函数,它接受由copy(string | number | boolean)或引用(其他所有内容)传递的参数列表。

在通过复制传递值的情况下,通过将其转换为string来打印该值。
在通过引用传递的值的情况下,该值在浏览器认为合适时被打印出来。

+运算符

加号运算符(+)被重载。 当运营商的双方都是号码时,返回两个运营商的总和。

如果运算符的任何一边是一个string,那么双方将被转换为string,并且这两个string的连接将被返回。

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

和写作一样

 console.log(String("hmm: ") + String(x)); 

通过用逗号(,)交换加号(+)来防止隐式string强制转换

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

更多信息

有关“console.log”函数的更深入的描述,请参阅:
https://developer.mozilla.org/en-US/docs/DOM/console.log

有关加号运算符(+)的更深入的描述,请参阅:
http://www.w3schools.com/js/js_operators.asp

使用string追加打印对象时使用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)) 

有关更多信息,请参阅util.inspect文档。

编辑:对不起,我的脑海里想我读了Node.js. 这仅适用于Node.js。 所以,我会把它留给任何Google员工。

编辑2:我不是疯了,我只是需要睡觉。 你写了Node.js. 我将添加它作为标记。

Interesting Posts