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:

  • 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. Auch die Methoden der zugehörigen typisierten Array-Ansichten werfen einen TypeError.

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 true zurück, wenn arg eine der ArrayBuffer-Ansichten ist, wie z.B. typed array objects oder ein DataView. Gibt andernfalls false zurück.

Instanz-Eigenschaften

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

ArrayBuffer.prototype.byteLength

Die Größe des ArrayBuffer in Bytes. Diese wird festgelegt, wenn das Array konstruiert wird und kann nur geändert werden, wenn der ArrayBuffer vergrößerbar ist, durch die Methode ArrayBuffer.prototype.resize().

ArrayBuffer.prototype.constructor

Die Konstruktorfunktion, die das Instanz-Objekt erstellt hat. Für ArrayBuffer-Instanzen ist der Anfangswert der ArrayBuffer-Konstruktor.

ArrayBuffer.prototype.detached

Nur-lesend. Gibt true zurück, wenn der ArrayBuffer losgelöst (übertragen) wurde, oder false, wenn nicht.

ArrayBuffer.prototype.maxByteLength

Die nur-lesbare maximale Länge in Bytes, auf die der ArrayBuffer vergrößert werden kann. Diese wird festgelegt, wenn das Array konstruiert wird und kann nicht geändert werden.

ArrayBuffer.prototype.resizable

Nur-lesend. Gibt true zurück, wenn der ArrayBuffer vergrößerbar ist, oder false, wenn nicht.

ArrayBuffer.prototype[Symbol.toStringTag]

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

Instanz-Methoden

ArrayBuffer.prototype.resize()

Vergrößert den ArrayBuffer auf die angegebene Größe in Bytes.

ArrayBuffer.prototype.slice()

Gibt einen neuen ArrayBuffer zurück, dessen Inhalt eine Kopie von den 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, im Gegensatz zum Anfang.

ArrayBuffer.prototype.transfer()

Erzeugt einen neuen ArrayBuffer mit demselben Byte-Inhalt wie dieser Puffer und löst dann diesen Puffer los.

ArrayBuffer.prototype.transferToFixedLength()

Erzeugt einen neuen, nicht-vergrößerbaren ArrayBuffer mit 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:

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

Spezifikationen

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

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
ArrayBuffer
[Symbol.species]
ArrayBuffer() constructor
maxByteLength option
byteLength
detached
isView
maxByteLength
resizable
resize
slice
transfer
transferToFixedLength

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
See implementation notes.

Siehe auch