ArrayBuffer.prototype.transferToFixedLength()

基线 2024

新可用

2024 年 3 月起,此功能在最新的设备和浏览器版本中均可使用。此功能可能无法在旧设备或浏览器中运行。

transferToFixedLength() 方法是 ArrayBuffer 实例的方法,它创建一个新的不可调整大小的 ArrayBuffer,其字节内容与当前缓冲区相同,然后分离当前缓冲区。

语法

js
transferToFixedLength()
transferToFixedLength(newByteLength)

参数

newByteLength

ArrayBufferbyteLength。默认值为当前 ArrayBufferbyteLength

  • 如果 newByteLength 小于当前 ArrayBufferbyteLength,则会丢弃“溢出”字节。
  • 如果 newByteLength 大于当前 ArrayBufferbyteLength,则会使用零填充额外的字节。

返回值

一个新的 ArrayBuffer 对象。其内容初始化为当前 ArrayBuffer 的内容,如果有额外的字节,则使用零填充。新的 ArrayBuffer 始终是不可调整大小的。原始 ArrayBuffer 被分离。

异常

TypeError

如果当前 ArrayBuffer 已经分离,则抛出此异常。

描述

transfer() 不同,transferToFixedLength() 始终创建一个不可调整大小的 ArrayBuffer。这意味着 newByteLength 可以大于 maxByteLength,即使当前 ArrayBuffer 是可调整大小的。有关更多信息,请参见 传输 ArrayBuffers

示例

将可调整大小的 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

使用 transferToFixedLengthnewByteLength 可以大于原始 ArrayBuffermaxByteLength

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

规范

规范
ArrayBuffer 传输
# sec-arraybuffer.prototype.transfertofixedlength

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参见