Node.js:不同的缓冲区输出

我已经使用缓冲区解码base64编码的string,现在我已经注意到一些有趣的事情:

这工作正常,输出解码的string为utf8

decoded = new Buffer(data.content, 'base64') console.log('Decoded:' + decoded); // outputs content of a markdown file 

但是,这会输出hex字符:

 decoded = new Buffer(data.content, 'base64') console.log(decoded); // outputs<Buffer 23 20 33 30 32 34 20 66 ...> 

为什么这个或我做错了什么? 不应该输出相同吗?

console.log的参数在node.js中使用util.format内部格式化。 (见https://github.com/joyent/node/blob/v0.11.4/lib/console.js的第52行&#xFF09;

当你调用console.log(obj);obj在内部直接传递给util.format 。 当您调用console.log('Decoded: '+obj) ,string连接强制.toString()首先在obj上调用,然后在内部将生成的组合string传递给util.format

因此,在第一种情况下,node.js格式化一个String对象,在第二种情况下,它直接格式化一个Buffer对象。

来自Mozilla的Javascript文件 :

每个对象都有一个toString()方法,当对象被表示为一个文本值时,或者当一个对象以一个string被期望的方式被引用时,该方法被自动调用。

Node.js缓冲文档: Buffer#toString 。