Javascript console.log(对象)与串联字符串

时间:2013-01-30 05:22:34

标签: 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' }的最佳方式是什么?

5 个答案:

答案 0 :(得分:61)

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

http://jsfiddle.net/Ze32g/

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

试试这个:

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

答案 1 :(得分:14)

console.log函数

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

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

+运算符

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

如果运算符的任一侧是字符串,则双方将被转换为字符串,并且将返回这两个字符串的串联。

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

答案 2 :(得分:6)

使用字符串追加

打印对象时使用JSON.stringify
console.log("Haa"+JSON.stringify(x))

答案 3 :(得分:2)

您有多种选择:

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.我打算将它添加为标签。

答案 4 :(得分:1)

您可以使用console.log(JSON.stringify(yourObject));打印对象。可以!