ArrayBuffer.prototype.transferToFixedLength()
transferToFixedLength() 方法用于 ArrayBuffer 实例,它会创建一个具有相同字节内容的新、不可调整大小的 ArrayBuffer,然后分离(detach)原始缓冲区。
语法
js
transferToFixedLength()
transferToFixedLength(newByteLength)
参数
newByteLength-
新
ArrayBuffer的byteLength。默认为此ArrayBuffer的byteLength。- 如果
newByteLength小于此ArrayBuffer的byteLength,则会丢弃“溢出”的字节。 - 如果
newByteLength大于此ArrayBuffer的byteLength,则额外的字节将用零填充。
- 如果
返回值
一个新的 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
使用 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
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-arraybuffer.prototype.transfertofixedlength |
浏览器兼容性
加载中…