ArrayBuffer
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
Das ArrayBuffer-Objekt wird verwendet, um einen generischen, rohen Binärdatenpuffer darzustellen.
Es ist ein Array von Bytes, das in anderen Sprachen oft als "Byte-Array" bezeichnet wird. Sie können den Inhalt eines ArrayBuffer nicht direkt manipulieren; stattdessen erstellen Sie eines der typed array objects oder ein DataView-Objekt, das den Puffer in einem spezifischen Format darstellt, und verwenden dieses, um den Inhalt des Puffers zu lesen und zu schreiben.
Der ArrayBuffer()-Konstruktor erzeugt einen neuen ArrayBuffer mit der angegebenen Länge in Bytes. Sie können auch einen Array-Puffer aus bestehenden Daten erhalten, zum Beispiel von einem Base64-String oder von einer lokalen Datei.
ArrayBuffer ist ein übertragbares Objekt.
Beschreibung
Resizing von ArrayBuffers
ArrayBuffer-Objekte können durch das Hinzufügen der Option maxByteLength beim Aufruf des ArrayBuffer()-Konstruktors vergrößerbar gemacht werden. Sie können abfragen, ob ein ArrayBuffer vergrößerbar ist und welche maximale Größe es hat, indem Sie auf seine resizable- und maxByteLength-Eigenschaften zugreifen. Sie können einem vergrößerbaren ArrayBuffer mit einem resize()-Aufruf eine neue Größe zuweisen. Neue Bytes werden auf 0 gesetzt.
Diese Funktionen machen das Vergrößern von ArrayBuffers effizienter – andernfalls müssten Sie eine Kopie des Puffers mit einer neuen Größe erstellen. Es gibt JavaScript auch Parität mit WebAssembly in dieser Hinsicht (das lineare Speicher von Wasm kann mit WebAssembly.Memory.prototype.grow() vergrößert werden).
Übertragung von ArrayBuffers
ArrayBuffer-Objekte können zwischen verschiedenen Ausführungskontexten, wie Web Workers oder Service Workers, unter Verwendung des strukturierten Klon-Algorithmus übertragen werden. Dies erfolgt durch das Übergeben des ArrayBuffer als übertragbares Objekt in einem Aufruf von Worker.postMessage() oder ServiceWorker.postMessage(). In reinem JavaScript können Sie auch das Eigentum des Speichers von einem ArrayBuffer zu einem anderen übertragen, indem Sie dessen transfer()- oder transferToFixedLength()-Methode verwenden.
Wenn ein ArrayBuffer übertragen wird, wird seine ursprüngliche Kopie losgelöst — das bedeutet, dass es nicht mehr verwendbar ist. Zu jeder Zeit wird es nur eine Kopie des ArrayBuffer geben, die tatsächlich Zugriff auf den zugrunde liegenden Speicher hat. Losgelöste Puffer haben das folgende Verhalten:
byteLengthwird 0 (sowohl im Puffer als auch in den zugehörigen typisierten Array-Ansichten).- Methoden wie
resize()undslice()werfen einenTypeError, wenn sie aufgerufen werden. Auch die Methoden der zugehörigen typisierten Array-Ansichten werfen einenTypeError.
Sie können überprüfen, ob ein ArrayBuffer losgelöst ist, indem Sie seine detached-Eigenschaft abfragen.
Konstruktor
ArrayBuffer()-
Erzeugt ein neues
ArrayBuffer-Objekt.
Statische Eigenschaften
ArrayBuffer[Symbol.species]-
Die Konstruktorfunktion, die zum Erstellen abgeleiteter Objekte verwendet wird.
Statische Methoden
ArrayBuffer.isView()-
Gibt
truezurück, wennargeine der ArrayBuffer-Ansichten ist, wie z.B. typed array objects oder einDataView. Gibt andernfallsfalsezurück.
Instanz-Eigenschaften
Diese Eigenschaften sind auf ArrayBuffer.prototype definiert und werden von allen ArrayBuffer-Instanzen geteilt.
ArrayBuffer.prototype.byteLength-
Die Größe des
ArrayBufferin Bytes. Diese wird festgelegt, wenn das Array konstruiert wird und kann nur geändert werden, wenn derArrayBuffervergrößerbar ist, durch die MethodeArrayBuffer.prototype.resize(). ArrayBuffer.prototype.constructor-
Die Konstruktorfunktion, die das Instanz-Objekt erstellt hat. Für
ArrayBuffer-Instanzen ist der Anfangswert derArrayBuffer-Konstruktor. ArrayBuffer.prototype.detached-
Nur-lesend. Gibt
truezurück, wenn derArrayBufferlosgelöst (übertragen) wurde, oderfalse, wenn nicht. ArrayBuffer.prototype.maxByteLength-
Die nur-lesbare maximale Länge in Bytes, auf die der
ArrayBuffervergrößert werden kann. Diese wird festgelegt, wenn das Array konstruiert wird und kann nicht geändert werden. ArrayBuffer.prototype.resizable-
Nur-lesend. Gibt
truezurück, wenn derArrayBuffervergrößerbar ist, oderfalse, wenn nicht. ArrayBuffer.prototype[Symbol.toStringTag]-
Der Anfangswert der
[Symbol.toStringTag]-Eigenschaft ist der String"ArrayBuffer". Diese Eigenschaft wird inObject.prototype.toString()verwendet.
Instanz-Methoden
ArrayBuffer.prototype.resize()-
Vergrößert den
ArrayBufferauf die angegebene Größe in Bytes. ArrayBuffer.prototype.slice()-
Gibt einen neuen
ArrayBufferzurück, dessen Inhalt eine Kopie von den Bytes diesesArrayBuffervonbegin(einschließlich) bisend(ausschließlich) ist. Wennbeginoderendnegativ ist, bezieht es sich auf einen Index vom Ende des Arrays, im Gegensatz zum Anfang. ArrayBuffer.prototype.transfer()-
Erzeugt einen neuen
ArrayBuffermit demselben Byte-Inhalt wie dieser Puffer und löst dann diesen Puffer los. ArrayBuffer.prototype.transferToFixedLength()-
Erzeugt einen neuen, nicht-vergrößerbaren
ArrayBuffermit demselben Byte-Inhalt wie dieser Puffer und löst dann diesen Puffer los.
Beispiele
Erstellen eines ArrayBuffer
In diesem Beispiel erstellen wir einen 8-Byte-Puffer mit einer Int32Array-Ansicht, die auf den Puffer verweist:
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification # sec-arraybuffer-objects |