ArrayBuffer.prototype.transferToFixedLength()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2024 browserübergreifend verfügbar.
Die Methode transferToFixedLength() von ArrayBuffer-Instanzen erstellt einen neuen ArrayBuffer mit fester Länge und demselben Byte-Inhalt wie der ursprüngliche Puffer. Anschließend wird der ursprüngliche Puffer abgetrennt.
Syntax
transferToFixedLength()
transferToFixedLength(newByteLength)
Parameter
newByteLength-
Die
byteLengthdes neuenArrayBuffer. Der Standardwert ist diebyteLengthdiesesArrayBuffer.- Wenn
newByteLengthkleiner als diebyteLengthdiesesArrayBufferist, werden die überzähligen Bytes verworfen. - Wenn
newByteLengthgrößer als diebyteLengthdiesesArrayBufferist, werden die zusätzlichen Bytes mit Nullen gefüllt.
- Wenn
Rückgabewert
Ein neues ArrayBuffer-Objekt. Sein Inhalt wird mit dem Inhalt dieses ArrayBuffer initialisiert; zusätzliche Bytes werden gegebenenfalls mit Nullen gefüllt. Der neue ArrayBuffer hat immer eine feste Länge. Der ursprüngliche ArrayBuffer wird abgetrennt.
Ausnahmen
TypeError-
Wird ausgelöst, wenn dieser
ArrayBufferbereits abgetrennt wurde oder nur durch bestimmte Operationen abgetrennt werden kann. Derzeit können nur bestimmte Web-APIsArrayBuffer-Objekte erzeugen, für deren Abtrennung bestimmte Methoden vorgesehen sind, beispielsweiseGPUBuffer.getMappedRange()undWebAssembly.Memory.buffer.
Beschreibung
Anders als transfer() erstellt transferToFixedLength() immer einen ArrayBuffer mit fester Länge. Das bedeutet, dass newByteLength größer als maxByteLength sein kann, selbst wenn dieser ArrayBuffer in der Größe veränderbar ist. Weitere Informationen finden Sie unter Übertragen von ArrayBuffers.
Beispiele
>Einen in der Größe veränderbaren ArrayBuffer in einen ArrayBuffer mit fester Länge übertragen
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
Bei Verwendung von transferToFixedLength kann newByteLength größer als die maxByteLength des ursprünglichen ArrayBuffer sein.
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
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-arraybuffer.prototype.transfertofixedlength> |