Start · Sprachen · JavaScript · Referenz · Int8Array

Int8Array

Klasse

Ein typisiertes Array für 8-Bit vorzeichenbehaftete Ganzzahlen (Wertebereich: −128 bis 127) mit fester Puffergröße.

seit JavaScript ES2015 Kategorie: core

Signatur

class Int8Array extends TypedArray

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 Uint8Array bereit.

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

Typ
Int8Array
Beschreibung
Eine neue 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
42 -56 1 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
[20, -40, 60, -80, 100] -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]
-3 8 [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]
[-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.