Spec-Zone.ru › JavaScript

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.transferToFixedLength in core-js
  • es-shims polyfill of ArrayBuffer.prototype.transferToFixedLength
  • ArrayBuffer
  • ArrayBuffer.prototype.detached
  • ArrayBuffer.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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API