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 Byte-Array, das in anderen Programmiersprachen oft als "Byte Array" bezeichnet wird. Sie können den Inhalt eines ArrayBuffer nicht direkt manipulieren; stattdessen erstellen Sie eines der typisierten Array-Objekte oder ein DataView-Objekt, das den Puffer in einem bestimmten Format darstellt und verwenden dieses, um den Inhalt des Puffers zu lesen und zu schreiben.

Der ArrayBuffer()-Konstruktor erstellt einen neuen ArrayBuffer mit der angegebenen Länge in Bytes. Sie können auch einen Array-Puffer aus vorhandenen Daten erhalten, beispielsweise aus einem Base64-String oder aus einer lokalen Datei.

ArrayBuffer ist ein übertragbares Objekt.

Beschreibung

Ändern der Größe von ArrayBuffers

ArrayBuffer-Objekte können durch Einbeziehen der maxByteLength-Option beim Aufruf des ArrayBuffer()-Konstruktors größenänderbar gemacht werden. Sie können abfragen, ob ein ArrayBuffer größenänderbar ist und welche maximale Größe es hat, indem Sie auf seine resizable- und maxByteLength-Eigenschaften zugreifen. Sie können einem größenänderbaren ArrayBuffer eine neue Größe zuweisen, indem Sie einen resize()-Aufruf durchführen. Neue Bytes werden auf 0 initialisiert.

Diese Funktionen machen das Ändern der Größe von ArrayBuffers effizienter — andernfalls müssen Sie eine Kopie des Puffers mit neuer Größe erstellen. Es gibt JavaScript auch Gleichwertigkeit mit WebAssembly in dieser Hinsicht (Wasm lineares Gedächtnis kann mit WebAssembly.Memory.prototype.grow() erweitert werden).

Übertragen von ArrayBuffers

ArrayBuffer-Objekte können zwischen verschiedenen Ausführungskontexten, wie Web Workers oder Service Workers, unter Verwendung des Structured-Clone-Algorithmus übertragen werden. Dies geschieht, indem der ArrayBuffer als übertragbares Objekt in einem Aufruf von Worker.postMessage() oder ServiceWorker.postMessage() übergeben wird. In reinem JavaScript können Sie auch die Besitzrechte des Speichers von einem ArrayBuffer zu einem anderen unter Verwendung seiner transfer()- oder transferToFixedLength()-Methode übertragen.

Wenn ein ArrayBuffer übertragen wird, wird seine ursprüngliche Kopie abgetrennt — das bedeutet, sie ist nicht mehr verwendbar. Zu jedem Zeitpunkt wird es nur eine Kopie des ArrayBuffer geben, die tatsächlich Zugriff auf den zugrunde liegenden Speicher hat. Abgetrennte Puffer haben folgende Verhalten:

  • byteLength wird 0 (sowohl im Puffer als auch in den zugehörigen typisierten Array-Ansichten).
  • Methoden wie resize() und slice() werfen einen TypeError, wenn sie aufgerufen werden. Die zugehörigen Methoden der typisierten Array-Ansichten werfen ebenfalls einen TypeError.

Sie können überprüfen, ob ein ArrayBuffer abgetrennt ist, indem Sie seine detached-Eigenschaft abfragen.

Konstruktor

ArrayBuffer()

Erstellt ein neues ArrayBuffer-Objekt.

Statische Eigenschaften

ArrayBuffer[Symbol.species]

Die Konstruktionsfunktion, die zum Erstellen von abgeleiteten Objekten verwendet wird.

Statische Methoden

ArrayBuffer.isView()

Gibt true zurück, wenn arg eine der ArrayBuffer-Ansichten ist, wie beispielsweise typisierte Array-Objekte oder ein DataView. Gibt andernfalls false zurück.

Instanzeigenschaften

Diese Eigenschaften sind auf ArrayBuffer.prototype definiert und werden von allen ArrayBuffer-Instanzen geteilt.

ArrayBuffer.prototype.byteLength

Die Größe, in Bytes, des ArrayBuffer. Diese wird bei der Konstruktion des Arrays festgelegt und kann nur mithilfe der ArrayBuffer.prototype.resize()-Methode geändert werden, wenn der ArrayBuffer größenänderbar ist.

ArrayBuffer.prototype.constructor

Die Konstruktionsfunktion, die das Instanzobjekt erstellt hat. Für ArrayBuffer-Instanzen ist der anfängliche Wert der ArrayBuffer-Konstruktor.

ArrayBuffer.prototype.detached

Nur lesbar. Gibt true zurück, wenn der ArrayBuffer abgetrennt (übertragen) wurde, oder false, wenn nicht.

ArrayBuffer.prototype.maxByteLength

Die nur-lesbare maximale Länge, in Bytes, auf die der ArrayBuffer geändert werden kann. Diese wird bei der Konstruktion des Arrays festgelegt und kann nicht geändert werden.

ArrayBuffer.prototype.resizable

Nur lesbar. Gibt true zurück, wenn der ArrayBuffer größenänderbar ist, oder false, wenn nicht.

ArrayBuffer.prototype[Symbol.toStringTag]

Der anfängliche Wert der [Symbol.toStringTag]-Eigenschaft ist der String "ArrayBuffer". Diese Eigenschaft wird in Object.prototype.toString() verwendet.

Instanzmethoden

ArrayBuffer.prototype.resize()

Ändert die Größe des ArrayBuffer auf die angegebene Größe, in Bytes.

ArrayBuffer.prototype.slice()

Gibt einen neuen ArrayBuffer zurück, dessen Inhalt eine Kopie der Bytes dieses ArrayBuffer von begin (einschließlich) bis end (ausschließlich) ist. Wenn begin oder end negativ ist, bezieht es sich auf einen Index vom Ende des Arrays, anstatt vom Anfang.

ArrayBuffer.prototype.transfer()

Erstellt einen neuen ArrayBuffer mit demselben Byteinhalt wie dieser Puffer, trennt dann diesen Puffer ab.

ArrayBuffer.prototype.transferToFixedLength()

Erstellt einen neuen nicht größenänderbaren ArrayBuffer mit demselben Byteinhalt wie dieser Puffer, trennt dann diesen Puffer ab.

Beispiele

Erstellen eines ArrayBuffer

In diesem Beispiel erstellen wir einen 8-Byte-Puffer mit einer Int32Array-Ansicht, die auf diesen Puffer verweist:

js
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-arraybuffer-objects

Browser-Kompatibilität

Siehe auch