ArrayBuffer.prototype.transferToFixedLength()

Baseline 2024
新推出

自 ⁨2024 年 3 月⁩ 起,此功能可在最新的裝置和瀏覽器版本上執行。此功能可能不適用於較舊的裝置或瀏覽器。

transferToFixedLength() 方法用於 ArrayBuffer 例項,它會建立一個具有相同位元組內容的新、不可調整大小的 ArrayBuffer,然後分離(detach)原始緩衝區。

語法

js
transferToFixedLength()
transferToFixedLength(newByteLength)

引數

newByteLength

ArrayBufferbyteLength。預設為此 ArrayBufferbyteLength

  • 如果 newByteLength 小於此 ArrayBufferbyteLength,則會丟棄“溢位”的位元組。
  • 如果 newByteLength 大於此 ArrayBufferbyteLength,則額外的位元組將用零填充。

返回值

一個新的 ArrayBuffer 物件。其內容初始化為此 ArrayBuffer 的內容,並且任何額外的位元組將用零填充。新 ArrayBuffer 始終是不可調整大小的。原始 ArrayBuffer 將被分離。

異常

TypeError

如果此 ArrayBuffer 已被分離,或者它只能透過指定的操作來分離,則會丟擲此錯誤。目前,只有某些 Web API 能夠建立具有指定分離方法的 ArrayBuffer 物件,例如 GPUBuffer.getMappedRange()WebAssembly.Memory.buffer

描述

transfer() 不同,transferToFixedLength() 始終建立一個不可調整大小的 ArrayBuffer。這意味著 newByteLength 可以大於 maxByteLength,即使此 ArrayBuffer 是可調整大小的。有關更多資訊,請參閱 Transferring 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

規範

規範
ECMAScript® 2026 語言規範
# sec-arraybuffer.prototype.transfertofixedlength

瀏覽器相容性

另見