Nodejs 为什么 Buffer.from(array) 替代 new Buffer(array) ?避免使用 new 的原因?
Nodejs 为什么 Buffer.from(array) 替代 new Buffer(array) ?避免使用 new 的原因?
以及类似的静态方法替代 new 的问题. 在 JavaScript 中这样做是基于什么原因?
11 回复
我记得是 new Buffer()可以接受不同类型的参数 产生不同的结果,容易引起歧义吧,所以都给改掉了
如果每次传入的 array 一样,生成的都是同一个 Buffer。但是 new Buffer 每次都会生成一个新的 Buffer,即使每次调用的时候都是同样的 array
以上是我猜的,我没写过 js
为什么这个帖子是黑色的背景?
可以看下 joshua bloch 的 effective java 关于静态工厂的章节
蛤蛤,java 狗撸过
Node.js
节点主题
buffer 成为内置模块了,文档上写了,不过其他的我就不记得了~
查了一下,Buffer.from(array) 还有一个调用的方式,那个能够直接用 TypedArray 的 buffer,所以用 new 容易引起歧义
我刚去看了文档, 您就发来了链接. 心有灵犀呀~
在Node.js中,Buffer.from(array)
替代new Buffer(array)
主要有以下几个原因:
- 语法现代化:
Buffer.from()
是ES6(ECMAScript 2015)及以后版本中推荐的创建Buffer对象的方法,更符合现代JavaScript的语法规范。而new Buffer(array)
则是早期Node.js版本中使用的语法,逐渐被淘汰。 - 安全性:
new Buffer(array)
在某些情况下可能引入安全隐患,如未初始化的内存区域可能包含敏感数据。而Buffer.from()
则提供了更安全的内存初始化方式。 - 性能优化:
Buffer.from()
在内部进行了性能优化,相比new Buffer(array)
在处理大数据量时可能具有更好的性能表现。 - 语义明确:
Buffer.from()
语义更加明确,直接表达了从什么数据创建Buffer对象的意图,而new Buffer(array)
则可能与其他new
操作符的使用产生混淆。
以下是一个示例代码,展示了如何使用Buffer.from()
替代new Buffer(array)
:
// 不推荐使用的语法
// var buffer = new Buffer([1, 2, 3, 4]);
// 推荐使用的语法
var buffer = Buffer.from([1, 2, 3, 4]);
console.log(buffer); // 输出: <Buffer 01 02 03 04>
综上所述,为了避免潜在的安全隐患、提高代码的可读性和性能,建议使用Buffer.from()
替代new Buffer(array)
。