ArrayBuffer.prototype.transferToFixedLength()
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с марта 2024 года.
Метод transferToFixedLength() экземпляров ArrayBuffer создает новый нерегулируемый ArrayBuffer с тем же байтовым содержимым, что и этот буфер, а затем отсоединяет этот буфер.
Синтаксис
transferToFixedLength() transferToFixedLength(newByteLength)
Параметры
-
newByteLength -
byteLengthновогоArrayBuffer. По умолчанию используетсяbyteLengthэтогоArrayBuffer.- Если
newByteLengthменьше, чемbyteLengthэтогоArrayBuffer, "лишние" байты отбрасываются. - Если
newByteLengthбольше, чемbyteLengthэтогоArrayBuffer, дополнительные байты заполняются нулями.
- Если
Возвращаемое значение
Новый объект ArrayBuffer. Его содержимое инициализируется содержимым этого ArrayBuffer, а лишние байты, если таковые имеются, заполняются нулями. Новый ArrayBuffer всегда нерегулируемый. Оригинальный ArrayBuffer отсоединяется.
Исключения
-
TypeError - Выбрасывается, если этот
ArrayBufferуже отсоединен, или если он может быть отсоединен только по указанным операциям. В настоящее время только определенные веб-API способны создавать объектыArrayBufferс указанными методами отсоединения, такие какGPUBuffer.getMappedRange()иWebAssembly.Memory.buffer.
Описание
В отличие от transfer(), transferToFixedLength() всегда создает нерегулируемый ArrayBuffer. Это означает, что newByteLength может быть больше, чем maxByteLength, даже если этот ArrayBuffer регулируемый. См. передача ArrayBuffers для получения дополнительной информации.
Примеры
Передача регулируемого ArrayBuffer в фиксированную длину
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 может быть больше, чем maxByteLength исходного ArrayBuffer.
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® 2027 Language Specification # sec-arraybuffer.prototype.transfertofixedlength |
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
transferToFixedLength |
114 |
114 |
122 |
100 |
17.4 |
114 |
122 |
76 |
17.4 |
23.0 |
114 |
17.4 |
1.0.19 |
1.33 |
21.0.0 |
См. также
- Polyfill of
ArrayBuffer.prototype.transferToFixedLengthincore-js - es-shims polyfill of
ArrayBuffer.prototype.transferToFixedLength ArrayBufferArrayBuffer.prototype.detachedArrayBuffer.prototype.transfer()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/transferToFixedLength