为什么我们需要 Buffer.isBuffer 方法?

Why do we need Buffer.isBuffer method?

当我们知道 Buffer.isBuffer 方法与 instanceof Buffer 做同样的事情时,为什么我们需要它?

https://github.com/nodejs/node/blob/master/lib/buffer.js#L306

技术上没有必要。它的存在是为了方便,并且至少在某种程度上可能是惯用的。

没有给出详细解释 when it was defined, but it appears to have been a refactoring (DRY – 回答“什么是缓冲区”一次并重复使用)and/or 风格偏好:

-  if (!(buffer instanceof Buffer)) {
+  if (!Buffer.isBuffer(buffer)) {

可能从 Array.isArray() 中获得了一些灵感。

而且,它确实还提供了一些额外的向后兼容性(或者可能是一些面向未来的功能),因为并非所有 Node 版本 have had a single type for Buffers:

Buffer.isBuffer = function isBuffer(b) {
  return b instanceof Buffer || b instanceof SlowBuffer;
};