Start · Sprachen · JavaScript · Referenz · Int32Array

Int32Array

Klasse

Typisiertes Array für 32-Bit vorzeichenbehaftete Ganzzahlen (Wertebereich: −2.147.483.648 bis 2.147.483.647) in plattformnativer Byte-Reihenfolge.

seit JavaScript ES2015 Kategorie: core

Signatur

class Int32Array extends TypedArray

Beschreibung

Int32Array ist ein typisiertes Array (TypedArray), das eine binäre Folge von vorzeichenbehafteten 32-Bit-Ganzzahlen (je 4 Byte pro Element) in einem zugrunde liegenden ArrayBuffer speichert. Es eignet sich überall dort, wo Ganzzahlen im Bereich −2.147.483.648 bis 2.147.483.647 speichereffizient und ohne Konvertierungsaufwand verarbeitet werden müssen – etwa bei Audio-Verarbeitung, WebGL-Puffern, Binärprotokollen oder Kryptografie.

Die Byte-Reihenfolge richtet sich nach der Plattform (in der Praxis fast immer Little-Endian). Muss die Reihenfolge explizit kontrolliert werden, empfiehlt sich stattdessen DataView. Alle Elemente werden beim Schreiben automatisch auf ganze Zahlen gestutzt (Truncation); Fließkomma-Werte verlieren dabei ihren Nachkommaanteil.

Int32Array erbt alle Methoden des abstrakten TypedArray-Prototyps, darunter map(), filter(), reduce(), slice(), set() und subarray(). Da es keinen eigenen Prototyp-Konstruktor besitzt, wird es ausschließlich über new Int32Array(…) erzeugt.

  • BYTES_PER_ELEMENT: statische Konstante mit dem Wert 4.
  • Puffer teilen: Mehrere typisierte Arrays können denselben ArrayBuffer nutzen und sich so denselben Speicherbereich teilen.
  • SharedArrayBuffer: Zusammen mit Atomics kann Int32Array für thread-sichere Operationen in Web Workern genutzt werden.

Parameter

Name Typ Default Beschreibung
$argument number|ArrayBuffer|SharedArrayBuffer|ArrayLike|Iterable Wird eine Zahl übergeben, legt sie die Anzahl der Elemente fest (alle mit 0 initialisiert). Ein ArrayBuffer oder SharedArrayBuffer wird direkt als Backing-Speicher verwendet. Ein Array-ähnliches Objekt oder ein Iterable wird elementweise kopiert und konvertiert.
$byteOffset number 0 Nur bei ArrayBuffer-Konstruktion: Byte-Offset, ab dem der View beginnt. Muss ein Vielfaches von 4 (BYTES_PER_ELEMENT) sein.
$length number Nur bei ArrayBuffer-Konstruktion: Anzahl der Elemente im View. Standardmäßig reicht der View bis zum Ende des Puffers.

Rückgabewert

Typ
Int32Array
Beschreibung
Eine neue Int32Array-Instanz, die auf einen ArrayBuffer zeigt.

Beispiele

Grundlegende Verwendung

// Aus einer Längenangabe (alle Werte = 0)
const a = new Int32Array(4);
a[0] = -2147483648; // Minimalwert
a[1] = 2147483647;  // Maximalwert
a[2] = 42;
console.log(a);              // Int32Array(4) [-2147483648, 2147483647, 42, 0]
console.log(a.BYTES_PER_ELEMENT); // 4
console.log(a.byteLength);   // 16

// Aus einem normalen Array
const b = new Int32Array([10, 20, 30]);
console.log(b[1]); // 20

// Fließkomma wird gestutzt (nicht gerundet)
const c = new Int32Array([3.9, -1.1]);
console.log([...c]); // [3, -1]
Int32Array(4) [-2147483648, 2147483647, 42, 0] 4 16 20 [3, -1]

Gemeinsamer ArrayBuffer & Atomics in einem Worker

// Hauptthread
const sab = new SharedArrayBuffer(4);       // 1 Int32-Element
const counter = new Int32Array(sab);

const worker = new Worker('worker.js');
worker.postMessage(sab);

// Auf Wert warten (Hauptthread schläft, bis counter[0] !== 0)
Atomics.wait(counter, 0, 0);               // Wartet, bis Wert ≠ 0
console.log('Counter vom Worker:', Atomics.load(counter, 0));

// --- worker.js ---
// self.onmessage = ({ data: sab }) => {
//   const counter = new Int32Array(sab);
//   Atomics.add(counter, 0, 1);           // Thread-sicher inkrementieren
//   Atomics.notify(counter, 0, 1);        // Hauptthread aufwecken
// };
Counter vom Worker: 1

Puffer teilen zwischen Int32Array und Uint8Array

const buffer = new ArrayBuffer(8);
const int32  = new Int32Array(buffer);
const uint8  = new Uint8Array(buffer);

int32[0] = 0x01020304;
console.log(uint8[0].toString(16)); // '4'  (Little-Endian: LSB zuerst)
console.log(uint8[1].toString(16)); // '3'
console.log(uint8[2].toString(16)); // '2'
console.log(uint8[3].toString(16)); // '1'
4 3 2 1

// Wichtig · Fallstricke

Überlauf: Werte außerhalb des 32-Bit-Bereichs werden modular gestutzt (Wrapping). Beispiel: new Int32Array([2147483648])[0] ergibt -2147483648.

Byte-Reihenfolge: Die Reihenfolge ist plattformabhängig (de facto immer Little-Endian in modernen Browsern und Node.js). Für netzwerkkompatiblen Datenaustausch mit garantierter Byte-Reihenfolge sollte DataView mit getInt32(offset, littleEndian) verwendet werden.

Atomics & SharedArrayBuffer: Ab Chrome 68 / Firefox 79 (nach Spectre-Pause) wieder verfügbar. Seiten müssen dafür Cross-Origin-isoliert sein (Cross-Origin-Opener-Policy: same-origin + Cross-Origin-Embedder-Policy: require-corp).

Browser-Kompatibilität: Int32Array ist in allen modernen Browsern und Node.js ab v4 vollständig verfügbar.