Signatur
Beschreibung
TypedArray.of() ist eine statische Methode, die es auf jedem konkreten Konstruktor für typisierte Arrays gibt, etwa Int8Array.of(), Uint8Array.of(), Float64Array.of() oder BigInt64Array.of(). Jedes übergebene Argument wird zu einem Element des neuen Arrays. Die Länge des Ergebnisses entspricht der Anzahl der Argumente.
Sie ist das Gegenstück zu Array.of() und löst dasselbe Problem: Der Konstruktor new Uint8Array(5) legt ein Array mit fünf Nullen an und kein Array mit dem Element 5. Uint8Array.of(5) dagegen liefert eindeutig [5]. Das ist praktisch, wenn man feste Byte-Folgen, Farbwerte, Vektoren oder Matrizen direkt im Code angeben will.
Jeder Wert wird in den Elementtyp des Ziel-Arrays umgewandelt. Bei Ganzzahl-Typen wird abgeschnitten und modulo gerechnet, bei Uint8ClampedArray auf 0–255 begrenzt, bei Float-Typen ggf. gerundet. BigInt64Array und BigUint64Array erwarten BigInt-Werte. Da this als Konstruktor verwendet wird, funktioniert of() auch mit eigenen Unterklassen typisierter Arrays.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $...elements | number | bigint | Beliebig viele Werte, die zu Elementen des neuen typisierten Arrays werden. Sie werden in den Elementtyp umgewandelt (bei BigInt64Array/BigUint64Array müssen es BigInt-Werte sein). |
Rückgabewert
Uint8Array), die die übergebenen Werte enthält. Ohne Argumente entsteht ein leeres Array der Länge 0.Beispiele
Einfache Erzeugung und Unterschied zum Konstruktor
const a = Uint8Array.of(5);
const b = new Uint8Array(5);
console.log(a); // ein Element mit dem Wert 5
console.log(b); // fünf Nullen
const leer = Int16Array.of();
console.log(leer.length);
Typumwandlung und Überlauf
console.log(Uint8Array.of(1, 255, 256, -1, 3.7));
console.log(Uint8ClampedArray.of(300, -20, 127.5));
console.log(Int8Array.of(128, '42', 'abc'));
Magic Bytes einer PNG-Datei prüfen
const PNG_SIGNATUR = Uint8Array.of(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a);
const istPng = async (datei) => {
const kopf = new Uint8Array(await datei.slice(0, 8).arrayBuffer());
return PNG_SIGNATUR.every((byte, i) => kopf[i] === byte);
};
// Browser: document.querySelector('input[type=file]').files[0]
// istPng(datei).then(console.log);
BigInt-Arrays und Vektoren für WebGL
const ids = BigUint64Array.of(1n, 2n ** 63n, 42n);
console.log(ids[1]);
// Dreieck als Float32-Vertexdaten (x, y)
const vertices = Float32Array.of(
0.0, 0.5,
-0.5, -0.5,
0.5, -0.5
);
console.log(vertices.length, vertices.BYTES_PER_ELEMENT);
// Wichtig · Fallstricke
- Kein globales
TypedArray:TypedArrayist nur ein Oberbegriff (die abstrakte Basis, erreichbar perObject.getPrototypeOf(Int8Array)). Direkt aufgerufen wirftObject.getPrototypeOf(Int8Array).of(1)einenTypeError. Man ruft die Methode immer auf einem konkreten Typ auf, z. B.Float32Array.of(). - Stiller Datenverlust: Werte außerhalb des Wertebereichs werden ohne Fehlermeldung umgebrochen (
Uint8Array.of(256)→0), Nachkommastellen werden bei Ganzzahl-Typen abgeschnitten, und nicht-numerische Werte werden zu0(bzw.NaNbei Float-Typen). - BigInt vs. Number:
BigInt64Array.of(1)wirft einenTypeError. Umgekehrt führtInt32Array.of(1n)ebenfalls zu einemTypeError. Zahlentypen nicht mischen. - Nicht verwechseln mit
from():of()nimmt einzelne Argumente entgegen. Für vorhandene Arrays oder andere Iterables istTypedArray.from()gedacht. Bei sehr vielen Werten solltest du den Spread-Operator (Uint8Array.of(...riesig)) vermeiden, weil sonst die maximale Argumentanzahl der Engine überschritten werden kann (RangeError). - Kompatibilität: Wird seit ES2015 von allen modernen Browsern und Node.js unterstützt. Die BigInt-Varianten gibt es seit ES2020.