Signatur
Beschreibung
Int8Array ist eines der sogenannten Typed Arrays aus der ECMAScript 2015-Spezifikation. Es speichert 8-Bit vorzeichenbehaftete Ganzzahlen (Two's-Complement-Format) im Wertebereich von −128 bis 127. Jedes Element belegt genau 1 Byte im zugrunde liegenden ArrayBuffer.
Typed Arrays werden überall dort eingesetzt, wo Rohdaten effizient im Arbeitsspeicher gehalten werden müssen: Bildverarbeitung (Canvas/WebGL), Netzwerkprotokolle, WebSockets, Web Audio, Datei-I/O über die File API oder Kommunikation mit WebAssembly. Im Gegensatz zu einem normalen JavaScript-Array ist die Länge und der Typ der Elemente fest; schreibt man einen Wert außerhalb des Wertebereichs, wird er still abgeschnitten (Modulo-Verhalten).
Alle Standard-Methoden eines Typed Arrays stehen zur Verfügung (map, filter, forEach, slice usw.), jedoch gibt es keine Methoden zum dynamischen Hinzufügen oder Entfernen von Elementen (push, pop u. ä. fehlen).
- BYTES_PER_ELEMENT:
1– jedes Element belegt 1 Byte. - Kein automatisches Wachstum: Größe wird beim Erstellen festgelegt und kann nicht geändert werden.
- Vorzeichen: Für vorzeichenlose 8-Bit-Werte steht
Uint8Arraybereit.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $length | number | Anzahl der Elemente im Array. Der interne ArrayBuffer wird mit length × 1 Bytes angelegt, alle Elemente werden mit 0 initialisiert. |
|
| $typedArray | TypedArray | Ein anderes typisiertes Array, dessen Werte kopiert und – falls nötig – in 8-Bit-Ganzzahlen konvertiert werden. | |
| $object | object|Array|Iterable | Ein Array-artiges oder iterierbares Objekt; jedes Element wird in eine 8-Bit-Ganzzahl konvertiert. | |
| $buffer | ArrayBuffer|SharedArrayBuffer | Ein bestehender Speicherpuffer, auf den das Int8Array verweist (Zero-Copy-Zugriff). |
|
| $byteOffset | number | 0 | Byte-Offset innerhalb des buffer, ab dem das Array beginnt. Muss ein Vielfaches von BYTES_PER_ELEMENT (1) sein. |
| $length | number | Anzahl der Elemente, wenn ein buffer übergeben wird. Ohne Angabe reicht das Array bis zum Ende des Puffers. |
Rückgabewert
Int8Array-Instanz, die auf einen ArrayBuffer verweist und Ganzzahlen im Bereich −128 bis 127 enthält.Beispiele
Grundlegende Erstellung und Zugriff
// Leeres Int8Array mit 4 Elementen (alle 0)
const arr = new Int8Array(4);
arr[0] = 42;
arr[1] = -10;
arr[2] = 200; // Überlauf: 200 % 256 - 256 = -56
arr[3] = 127;
console.log(arr[0]); // 42
console.log(arr[2]); // -56 (Überlauf wird still abgeschnitten)
console.log(Int8Array.BYTES_PER_ELEMENT); // 1
console.log(arr.byteLength); // 4
Aus einem normalen Array erstellen und iterieren
const source = [10, -20, 30, -40, 50];
const int8 = new Int8Array(source);
// Alle Werte mit map verdoppeln
const doubled = int8.map(v => v * 2);
console.log([...doubled]); // [20, -40, 60, -80, 100]
// Summe aller Elemente
const sum = int8.reduce((acc, v) => acc + v, 0);
console.log(sum); // -10
Gemeinsamer ArrayBuffer mit DataView
// Gemeinsamer Puffer: 8 Bytes
const buffer = new ArrayBuffer(8);
const int8View = new Int8Array(buffer);
const dataView = new DataView(buffer);
// Über Int8Array schreiben
int8View.set([-1, 2, -3, 4, -5, 6, -7, 8]);
// Über DataView lesen (byteOffset 2, vorzeichenbehaftet)
console.log(dataView.getInt8(2)); // -3
console.log(dataView.getInt8(7)); // 8
// Slice erstellt eine Kopie (kein geteilter Puffer)
const slice = int8View.slice(1, 4);
console.log([...slice]); // [2, -3, 4]
Statische Methode Int8Array.from()
// Aus einem Generator-Iterable erstellen
const gen = function* () {
for (let i = -3; i <= 3; i++) yield i;
};
const arr = Int8Array.from(gen(), v => v * 10);
console.log([...arr]); // [-30, -20, -10, 0, 10, 20, 30]
// Wichtig · Fallstricke
Überlaufverhalten: Werte außerhalb von −128 bis 127 werden still abgeschnitten (Modulo 256, dann ggf. in den negativen Bereich verschoben). Es gibt keine Ausnahme oder Warnung – das kann zu schwer auffindbaren Fehlern führen.
Vorzeichen: Wer ausschließlich positive Werte (0–255) benötigt, sollte Uint8Array verwenden. Für die Bildverarbeitung existiert zudem Uint8ClampedArray, das Werte klemmt statt sie zu wrappen.
Performance: Typed Arrays sind für numerisch intensive Berechnungen deutlich schneller als reguläre JavaScript-Arrays, da Werte nativ als Rohbytes gespeichert werden und keine Boxing-Overhead entsteht.
Browser-Kompatibilität: Int8Array wird von allen modernen Browsern sowie Node.js ab Version 0.10 unterstützt. In sehr alten Umgebungen (IE < 10) ist ein Polyfill erforderlich.