最可靠方式是使用 buffer.isbuffer() 方法,它专为类型检测设计,避免跨 realm 问题和构造函数篡改风险;传入非 buffer 值均返回 false,仅真正 buffer 实例返回 true。

在 Node.js 中判断一个值是否为 Buffer 实例,最可靠、最推荐的方式是使用内置的 Buffer.isBuffer() 方法。
直接用 Buffer.isBuffer() 判断
这是官方提供的静态方法,专为类型检测设计,不依赖 instanceof(避免跨 Realm 问题),也不依赖构造函数名(防止被篡改)。
- 传入任意值,返回 true 或 false
- 参数为 null、undefined、普通对象、数组、字符串等,一律返回 false
- 只有真正的 Buffer 实例才返回 true
示例:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
const buf = Buffer.from('hello');<br>console.log(Buffer.isBuffer(buf)); // true<br>console.log(Buffer.isBuffer('abc')); // false<br>console.log(Buffer.isBuffer(null)); // false<br>console.log(Buffer.isBuffer([])); // false
不推荐的替代方式
以下方法存在兼容性或可靠性风险,应避免在生产环境使用:
- instanceof Buffer:在多上下文(如 iframe、worker、模块隔离)中可能失效
- obj.constructor === Buffer:构造函数可被覆盖,不安全
- typeof obj === 'object' && obj.length !== undefined:误判数组、普通对象等
注意 Buffer 构造方式已变更(v6+)
旧写法 new Buffer(10) 已废弃且有安全风险(可能触发内存泄漏或越界读写)。请统一使用现代 API:
-
Buffer.alloc(size)—— 创建清零的 Buffer(推荐用于敏感数据) -
Buffer.from(source)—— 从字符串、数组、ArrayBuffer 等安全创建
无论用哪种方式创建,Buffer.isBuffer() 都能正确识别。










