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



我已经使用缓冲区解码了一个base64编码的字符串,现在我注意到了一些有趣的东西:

这很好,将解码后的字符串输出为utf8

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

但是,它输出十六进制字符:

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进行内部格式化。(见第52行https://github.com/joyent/node/blob/v0.11.4/lib/console.js)

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

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

来自Mozilla Javascript文档:

每个对象都有一个toString()方法,当对象将表示为文本值,或者当对象以期望字符串的方式来指代。

Node.js缓冲区文档:buffer#toString。

最新更新