Start · Sprachen · JavaScript · Referenz · new Uint32Array()

new Uint32Array()

Methode

Der Konstruktor <code>Uint32Array()</code> erzeugt ein typisiertes Array aus vorzeichenlosen 32-Bit-Ganzzahlen (0 bis 4.294.967.295) in plattformabhängiger Byte-Reihenfolge.

seit JavaScript ES2015 (Baseline: alle Browser, Node.js) Kategorie: method-property

Signatur

new Uint32Array(lengthOrSourceOrBuffer, byteOffset, length)

Beschreibung

Mit new Uint32Array() legst du ein typisiertes Array an, dessen Elemente jeweils 4 Byte groß sind und vorzeichenlose Ganzzahlen im Bereich 0 bis 232 − 1 speichern. Alle Elemente werden mit 0 initialisiert, sofern keine Quelldaten übergeben werden.

Der Konstruktor ist überladen und akzeptiert verschiedene Aufrufformen:

  • new Uint32Array() bzw. new Uint32Array(length) – neues, mit Nullen gefülltes Array der angegebenen Länge.
  • new Uint32Array(typedArray) – kopiert die Werte eines anderen typisierten Arrays (mit Umwandlung in den Wertebereich).
  • new Uint32Array(object) – übernimmt Werte aus einem Array, einem array-ähnlichen oder einem iterierbaren Objekt (z. B. Set).
  • new Uint32Array(buffer, byteOffset, length) – erzeugt eine Sicht auf einen bestehenden ArrayBuffer oder SharedArrayBuffer, ohne Daten zu kopieren.

Typische Einsatzgebiete sind Pixeldaten (RGBA als ein 32-Bit-Wert), Hash- und Prüfsummenberechnungen, Zufallszahlen über crypto.getRandomValues(), WebGL-Indexpuffer sowie Binärprotokolle und WebAssembly-Speicher.

Der Konstruktor muss zwingend mit new aufgerufen werden; ein Aufruf als normale Funktion wirft einen TypeError.

Parameter

Name Typ Default Beschreibung
$length number 0 Anzahl der Elemente. Es werden length × 4 Byte reserviert und mit 0 gefüllt.
$typedArray TypedArray Ein anderes typisiertes Array, dessen Werte kopiert und in uint32 umgewandelt werden. Ein BigInt64Array/BigUint64Array ist nicht erlaubt (TypeError).
$object Array | ArrayLike<number> | Iterable<number> Array, array-ähnliches oder iterierbares Objekt, dessen Werte übernommen werden (wie bei Uint32Array.from()).
$buffer ArrayBuffer | SharedArrayBuffer Speicherpuffer, auf den das neue Array als Sicht zugreift. Änderungen wirken sich auf alle Sichten desselben Puffers aus.
$byteOffset number 0 Startposition in Byte innerhalb von buffer. Muss ein Vielfaches von 4 sein, sonst RangeError.
$length number (buffer.byteLength − byteOffset) / 4 Anzahl der Elemente der Sicht (nur zusammen mit buffer). Ohne Angabe reicht die Sicht bis zum Pufferende; die Restlänge muss dann durch 4 teilbar sein.

Rückgabewert

Typ
Uint32Array
Beschreibung
Ein neues Uint32Array-Objekt – entweder mit eigenem Speicher oder als Sicht auf den übergebenen Puffer.

Beispiele

Verschiedene Konstruktor-Formen

const leer = new Uint32Array(3);
console.log(leer); // mit Nullen gefüllt

const ausArray = new Uint32Array([1, 2, -1, 4294967296]);
console.log(ausArray); // -1 und 2^32 laufen über

const ausSet = new Uint32Array(new Set([10, 20, 30]));
console.log(ausSet.length, ausSet.BYTES_PER_ELEMENT);
Uint32Array(3) [0, 0, 0] Uint32Array(4) [1, 2, 4294967295, 0] 3 4

Sicht auf einen ArrayBuffer (ohne Kopie)

const buffer = new ArrayBuffer(16); // 16 Byte = 4 Elemente
const alle = new Uint32Array(buffer);
const mitte = new Uint32Array(buffer, 4, 2); // Elemente 1 und 2

mitte[0] = 0xDEADBEEF;
console.log(alle[1].toString(16));
console.log(new Uint8Array(buffer).slice(4, 8)); // Byte-Reihenfolge (meist Little-Endian)
deadbeef Uint8Array(4) [239, 190, 173, 222]

Kryptografisch sichere Zufallszahlen

const zufall = crypto.getRandomValues(new Uint32Array(4));
const token = Array.from(zufall, (n) => n.toString(16).padStart(8, '0')).join('');
console.log(token.length);
32

Pixel eines Canvas als 32-Bit-Werte bearbeiten

const canvas = document.createElement('canvas');
canvas.width = canvas.height = 2;
const ctx = canvas.getContext('2d');
const imageData = ctx.createImageData(2, 2);

// Ein Element = ein Pixel (RGBA), auf Little-Endian als 0xAABBGGRR
const pixel = new Uint32Array(imageData.data.buffer);
pixel.fill(0xFF0000FF); // deckend Rot
ctx.putImageData(imageData, 0, 0);
console.log(imageData.data.slice(0, 4));
Uint8ClampedArray(4) [255, 0, 0, 255]

// Wichtig · Fallstricke

  • Überlauf statt Fehler: Werte außerhalb von 0–4294967295 werden modulo 232 umgerechnet (-1 → 4294967295), Nachkommastellen abgeschnitten, NaN wird zu 0. Es gibt kein Clamping wie bei Uint8ClampedArray.
  • Ausrichtung: byteOffset muss durch 4 teilbar sein, und ohne length muss die restliche Pufferlänge ebenfalls durch 4 teilbar sein – sonst RangeError.
  • Byte-Reihenfolge: Es gilt die Endianness der Plattform (praktisch immer Little-Endian). Für Dateiformate oder Netzwerkprotokolle mit festgelegter Reihenfolge besser DataView mit getUint32(offset, littleEndian) verwenden.
  • Sicht vs. Kopie: Mit einem ArrayBuffer teilt das Array den Speicher, mit einem anderen typisierten Array wird dagegen kopiert.
  • Bitoperatoren: |, &, ^ liefern vorzeichenbehaftete 32-Bit-Werte; beim Zurückschreiben in das Array wird korrekt umgewandelt, beim Rechnen außerhalb hilft >>> 0.
  • Ohne new aufgerufen wirft der Konstruktor einen TypeError. Unterstützt in allen modernen Browsern und Node.js; das Übergeben eines iterierbaren Objekts sowie ein SharedArrayBuffer (nur bei Cross-Origin-Isolation) erfordern neuere Umgebungen.