Signatur
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 bestehendenArrayBufferoderSharedArrayBuffer, 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
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);
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)
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);
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));
// Wichtig · Fallstricke
- Überlauf statt Fehler: Werte außerhalb von
0–4294967295werden modulo 232 umgerechnet (-1→4294967295), Nachkommastellen abgeschnitten,NaNwird zu0. Es gibt kein Clamping wie beiUint8ClampedArray. - Ausrichtung:
byteOffsetmuss durch 4 teilbar sein, und ohnelengthmuss die restliche Pufferlänge ebenfalls durch 4 teilbar sein – sonstRangeError. - Byte-Reihenfolge: Es gilt die Endianness der Plattform (praktisch immer Little-Endian). Für Dateiformate oder Netzwerkprotokolle mit festgelegter Reihenfolge besser
DataViewmitgetUint32(offset, littleEndian)verwenden. - Sicht vs. Kopie: Mit einem
ArrayBufferteilt 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
newaufgerufen wirft der Konstruktor einenTypeError. Unterstützt in allen modernen Browsern und Node.js; das Übergeben eines iterierbaren Objekts sowie einSharedArrayBuffer(nur bei Cross-Origin-Isolation) erfordern neuere Umgebungen.