Что такое "Buffer.isBuffer", когда вы можете использовать "instanceof"?

Я не понимаю, в чем цель функции Buffer.isBuffer, когда instanceof работает как шарм:

var b = new Buffer('blabla')
assert.ok(b instanceof Buffer)

Ответы

Ответ 1

Ну, на самом деле они такие же (по крайней мере, в настоящее время):

- lib/buffer.js:

Buffer.isBuffer = function isBuffer(b) {
  return util.isBuffer(b);
};

- lib/util.js:

function isBuffer(arg) {
  return arg instanceof Buffer;
}
exports.isBuffer = isBuffer;

... поэтому единственной возможной причиной является читаемость. Обратите внимание, что перед этой конкретной реализацией был установлен набор макросов для проверки типов, используемых при создании источника. Но это было изменено с помощью этого коммита, и это было аргументацией:

Добавление макросов к Node JS-слою увеличивает барьер для вкладов, и он разбивает программы, экспортирующие Node js файлы для пользовательские модули. (Например, несколько браунирующих преобразований, мой readable-streams polyfill, модуль util-debuglog и т.д.). Это не маленькие проблемы.

Я бы предложил проверить всю дискуссию в сообщении pull.