ArrayBuffer.prototype.transferToFixedLength()

Baseline 2024

Newly available

Since March 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Die transferToFixedLength()-Methode von ArrayBuffer-Instanzen erstellt einen neuen nicht-resizierbaren ArrayBuffer mit dem gleichen Byte-Inhalt wie dieser Puffer und trennt dann diesen Puffer ab.

Syntax

js
transferToFixedLength()
transferToFixedLength(newByteLength)

Parameter

newByteLength

Die byteLength des neuen ArrayBuffer. Standardmäßig entspricht dies der byteLength dieses ArrayBuffer.

  • Ist newByteLength kleiner als die byteLength dieses ArrayBuffer, werden die "überlaufenden" Bytes entfernt.
  • Ist newByteLength größer als die byteLength dieses ArrayBuffer, werden die zusätzlichen Bytes mit Nullen gefüllt.

Rückgabewert

Ein neues ArrayBuffer-Objekt. Der Inhalt wird auf den Inhalt dieses ArrayBuffer initialisiert, und zusätzliche Bytes, falls vorhanden, werden mit Nullen gefüllt. Der neue ArrayBuffer ist immer nicht-resizierbar. Der ursprüngliche ArrayBuffer wird abgetrennt.

Ausnahmen

TypeError

Wird ausgelöst, wenn dieser ArrayBuffer bereits abgetrennt ist.

Beschreibung

Im Gegensatz zu transfer() erstellt transferToFixedLength() immer einen nicht-resizierbaren ArrayBuffer. Dies bedeutet, dass newByteLength größer als maxByteLength sein kann, selbst wenn dieser ArrayBuffer resizierbar ist. Siehe Übertragen von ArrayBuffers für weitere Informationen.

Beispiele

Übertragen eines resizierbaren ArrayBuffer in eine feste Länge

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

Mit transferToFixedLength kann newByteLength größer sein als maxByteLength des ursprünglichen ArrayBuffer.

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

Spezifikationen

Specification
ECMAScript Language Specification
# sec-arraybuffer.prototype.transfertofixedlength

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch