Start · Sprachen · JavaScript · Referenz · Uint32Array

Uint32Array

Klasse

Ein typisiertes Array für 32-Bit-Ganzzahlen ohne Vorzeichen (0 bis 4 294 967 295), das direkt auf einem <code>ArrayBuffer</code> operiert.

seit JavaScript ES2015 Kategorie: core

Signatur

class Uint32Array extends TypedArray

Beschreibung

Uint32Array ist ein typisiertes Array (TypedArray), das 32-Bit-Ganzzahlen ohne Vorzeichen im Wertebereich von 0 bis 4 294 967 295 speichert. Jedes Element belegt genau 4 Bytes im zugrunde liegenden ArrayBuffer. Die Byte-Reihenfolge richtet sich nach der Plattform (in der Praxis fast immer Little-Endian auf x86/x64-Systemen).

Uint32Array eignet sich besonders für performanzkritische Binärdatenverarbeitung, z. B. beim Lesen von Datei-Headern, Netzwerk-Protokollen, WebGL-Puffern, kryptografischen Algorithmen oder Audio-/Grafikverarbeitung. Da der Speicher zusammenhängend und typsicher ist, kann die JavaScript-Engine ihn deutlich effizienter verwalten als ein gewöhnliches Array.

Wie alle TypedArrays unterstützt Uint32Array die bekannten Array-Methoden (map, filter, forEach, reduce, slice, set, subarray usw.) sowie den Index-basierten Zugriff über []. Schreibt man einen Wert außerhalb des darstellbaren Bereichs, wird dieser modulo 2³² gespeichert (stille Kürzung).

Ein Uint32Array kann aus einer Längenangabe, einem anderen TypedArray, einem normalen Array, einem iterierbaren Objekt oder einem bestehenden ArrayBuffer (mit optionalem Byte-Offset und Element-Anzahl) erstellt werden.

Parameter

Name Typ Default Beschreibung
$length number Anzahl der Elemente (nicht Bytes). Der interne ArrayBuffer wird mit length × 4 Bytes angelegt, alle Werte mit 0 initialisiert.
$typedArray TypedArray Ein bestehendes TypedArray, dessen Werte in Uint32Array konvertiert und kopiert werden.
$object Array|Iterable Ein array-ähnliches oder iterierbares Objekt; jedes Element wird in eine vorzeichenlose 32-Bit-Ganzzahl umgewandelt.
$buffer ArrayBuffer|SharedArrayBuffer Ein bestehender Puffer, auf den das TypedArray als View zugreift. Kein Kopiervorgang — Änderungen wirken sich direkt auf den Puffer aus.
$byteOffset number 0 Byte-Offset innerhalb des buffer, ab dem das View beginnt. Muss ein Vielfaches von 4 sein.
$length number Anzahl der Elemente im View, wenn ein buffer übergeben wird. Lässt man den Wert weg, erstreckt sich das View bis zum Ende des Puffers.

Rückgabewert

Typ
Uint32Array
Beschreibung
Eine neue Instanz von Uint32Array, die auf einem internen oder übergebenen ArrayBuffer liegt.

Beispiele

Einfaches Erstellen und Zugreifen

// Uint32Array mit 4 Elementen anlegen
const arr = new Uint32Array([10, 200, 3000, 4000000000]);

console.log(arr[0]); // 10
console.log(arr[3]); // 4000000000
console.log(arr.byteLength); // 16 (4 Elemente × 4 Bytes)

// Wertebereich-Kürzung (modulo 2^32)
const overflow = new Uint32Array(1);
overflow[0] = 4294967297; // 2^32 + 1
console.log(overflow[0]); // 1
10 4000000000 16 1

Gemeinsamer ArrayBuffer mit DataView

// Binär-Header lesen: Magic-Bytes + Versionsnummer + Payload-Länge
const buffer = new ArrayBuffer(12);
const view = new DataView(buffer);

// Header befüllen (Little-Endian)
view.setUint32(0, 0xDEADBEEF, true); // Magic
view.setUint32(4, 2,          true); // Version
view.setUint32(8, 1024,       true); // Payload-Länge

// Mit Uint32Array auslesen (plattform-nativ, hier Little-Endian)
const header = new Uint32Array(buffer);
console.log(header[0].toString(16)); // deadbeef
console.log(header[1]);              // 2
console.log(header[2]);              // 1024
deadbeef 2 1024

Typische Array-Methoden auf Uint32Array

const pixels = new Uint32Array([0xFF0000FF, 0x00FF00FF, 0x0000FFFF]);

// Jeden Wert transformieren
const shifted = pixels.map(p => (p >>> 8)); // Alpha-Kanal entfernen
console.log(shifted[0].toString(16)); // ff0000

// Summierung aller Werte
const sum = pixels.reduce((acc, val) => acc + val, 0);
console.log(sum);

// Teilbereich ohne Kopie
const sub = pixels.subarray(1, 3);
console.log(sub.length); // 2
ff0000 4278255615 2

// Wichtig · Fallstricke

Byte-Reihenfolge: Uint32Array verwendet die native Byte-Reihenfolge der Plattform. Für plattformunabhängige Binär-Serialisierung (z. B. Netzwerk-Protokolle) sollte stattdessen DataView mit expliziter Endianness verwendet werden (getUint32/setUint32 mit dem littleEndian-Flag).

Stille Kürzung: Werte außerhalb von [0, 4 294 967 295] werden ohne Fehler per Modulo-Arithmetik gespeichert. Negative Zahlen werden ebenfalls still in vorzeichenlose Werte umgewandelt (z. B. −1 → 4 294 967 295).

Kein Kopieren bei Buffer-Übergabe: Wird ein ArrayBuffer direkt übergeben, zeigt das Uint32Array als View auf denselben Speicher. Mehrere Views auf denselben Buffer können sich gegenseitig überschreiben — dies ist gewollt, aber eine häufige Fehlerquelle.

SharedArrayBuffer: In Kombination mit SharedArrayBuffer und Atomics kann Uint32Array für Thread-sichere Inter-Worker-Kommunikation eingesetzt werden. Hier gelten besondere Sicherheitsanforderungen (COOP/COEP-Header).