Signatur
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
ArrayBuffernutzen und sich so denselben Speicherbereich teilen. - SharedArrayBuffer: Zusammen mit
AtomicskannInt32Arrayfü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
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]
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
// };
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'
// 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.