39

我在 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' }

4

5 回答 5

75

+ x对象强制x转换为字符串,即[object Object]

http://jsfiddle.net/Ze32g/

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

试试这个:

console.log("hmm: ", x);
于 2013-01-30T05:25:19.147 回答
17

console.log 函数

'console.log' 是一个重载函数,它接受通过副本(字符串|数字|布尔值)或通过引用(其他所有内容)传递的参数列表。

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

+ 运算符

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

如果运算符的任一侧是字符串,则两侧都将转换为字符串,并将返回这两个字符串的连接。

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

和写一样

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

解决方案

通过将加号 (+) 与逗号 (,) 交换来防止隐式字符串转换

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

更多信息

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

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

于 2013-01-30T05:54:47.510 回答
6

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

console.log("Haa"+JSON.stringify(x))
于 2013-01-30T05:25:26.457 回答
4

你可以console.log(JSON.stringify(yourObject));用来打印你的对象。这行得通!

于 2019-07-04T04:30:23.447 回答
3

您有多种选择:

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 有效。所以,我会把它留给任何谷歌员工。

Edit2:我没疯,我只是需要睡觉。你确实写过 Node.js。我要把它添加为标签。

于 2013-01-30T05:25:42.297 回答