ArrayBuffer.prototype.transferToFixedLength()
transferToFixedLength()
方法是 ArrayBuffer
实例的方法,它创建一个新的不可调整大小的 ArrayBuffer
,其字节内容与当前缓冲区相同,然后分离当前缓冲区。
语法
js
transferToFixedLength()
transferToFixedLength(newByteLength)
参数
newByteLength
-
新
ArrayBuffer
的byteLength
。默认值为当前ArrayBuffer
的byteLength
。- 如果
newByteLength
小于当前ArrayBuffer
的byteLength
,则会丢弃“溢出”字节。 - 如果
newByteLength
大于当前ArrayBuffer
的byteLength
,则会使用零填充额外的字节。
- 如果
返回值
一个新的 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
使用 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
规范
规范 |
---|
ArrayBuffer 传输 # sec-arraybuffer.prototype.transfertofixedlength |
浏览器兼容性
BCD 表格仅在浏览器中加载