ArrayBuffer.prototype.transferToFixedLength()
Baseline
2024
Newly available
Since March 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
ArrayBuffer 实例的 transferToFixedLength() 方法创建一个不可调整大小的新 ArrayBuffer 对象,该对象与此缓冲区具有相同的字节内容,然后将此缓冲区分离。
语法
js
transferToFixedLength()
transferToFixedLength(newByteLength)
参数
newByteLength-
新的
ArrayBuffer的byteLength。默认为此ArrayBuffer的byteLength。- 如果
newByteLength小于此ArrayBuffer的byteLength,则“溢出的”字节将被丢弃。 - 如果
newByteLength大于此ArrayBuffer的maxByteLength,则多余的字节用零填充。
- 如果
返回值
一个新的 ArrayBuffer 对象。它的内容被初始化为此 ArrayBuffer 的内容,如果有多余的字节,则用零填充。新的 ArrayBuffer 总是不可调整大小的。原始 ArrayBuffer 被分离。
异常
TypeError-
如果此
ArrayBuffer已经分离,则抛出该错误。
描述
和 transfer() 不同,transferToFixedLength() 总是创建一个不可调整大小的 ArrayBuffer。这意味着 newByteLength 可以比 maxByteLength 大,即使此 ArrayBuffer 是可调整大小的。有关更多信息,请参阅传输 ArrayBuffer。
示例
>将可调整大小的 ArrayBuffer 转换为固定长度
js
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
const view = new Uint8Array(buffer);
view[1] = 2;
view[7] = 4;
const buffer2 = buffer.transferToFixedLength();
console.log(buffer2.byteLength); // 8
console.log(buffer2.resizable); // false
const view2 = new Uint8Array(buffer2);
console.log(view2[1]); // 2
console.log(view2[7]); // 4
通过使用 transferToFixedLength,newByteLength 可以大于原来的 ArrayBuffer 的 maxByteLength。
js
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
const view = new Uint8Array(buffer);
view[1] = 2;
view[7] = 4;
const buffer2 = buffer.transferToFixedLength(20);
console.log(buffer2.byteLength); // 20
console.log(buffer2.resizable); // false
const view2 = new Uint8Array(buffer2);
console.log(view2[1]); // 2
console.log(view2[7]); // 4
规范
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-arraybuffer.prototype.transfertofixedlength> |
浏览器兼容性
Loading…