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]
:
漂亮的打印是一个非常好的,可能非常复杂的底层代码,有人作为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. 我将添加它作为标记。