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行)
当你调用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 。