当你可以使用'instanceof'时,'Buffer.isBuffer'的用途是什么?

seb*_*piq 23 node.js

Buffer.isBufferinstanceof像魅力一样工作时,我不明白该功能的目的是什么:

var b = new Buffer('blabla')
assert.ok(b instanceof Buffer)
Run Code Online (Sandbox Code Playgroud)

rai*_*7ow 35

嗯,实际上这些是相同的(至少目前):

- lib/buffer.js:

Buffer.isBuffer = function isBuffer(b) {
  return util.isBuffer(b);
};
Run Code Online (Sandbox Code Playgroud)

- lib/util.js:

function isBuffer(arg) {
  return arg instanceof Buffer;
}
exports.isBuffer = isBuffer;
Run Code Online (Sandbox Code Playgroud)

......所以唯一可能的原因是可读性.请注意,在此特定实现之前,有一用于类型检查的宏,在构建源时使用.但是这个提交已经改变了,这就是推理:

向Node的JS层添加宏会增加贡献的障碍,并且会破坏为userland模块导出Node的js文件的程序.(例如,几个browserify转换,我的可读流polyfill,util-debuglog模块等)这些都不是小问题.

我建议在commit的pull请求中检查整个讨论.