Signatur
Beschreibung
toLocaleString() wandelt jedes Element eines typisierten Arrays (z. B. Uint8Array, Float64Array, BigInt64Array) mit dessen eigener toLocaleString()-Methode in einen String um. Bei Zahlen ist das Number.prototype.toLocaleString(), bei BigInt-Arrays BigInt.prototype.toLocaleString(). Die Teilstrings werden anschließend zu einem einzigen String verbunden.
Die Argumente locales und options werden unverändert an die Formatierung jedes Elements weitergereicht. Damit lassen sich Tausendertrennzeichen, Dezimalzeichen, Währungen, Prozentangaben oder Einheiten gemäß Intl.NumberFormat steuern.
Der Algorithmus entspricht dem von Array.prototype.toLocaleString(). Das Trennzeichen zwischen den Elementen hängt nicht von der Locale ab und ist in allen gängigen Engines ein Komma ,. Für Anzeigezwecke in deutschsprachigen Oberflächen ist das oft ungeeignet, weil das Komma dort auch als Dezimalzeichen dient.
Die Methode eignet sich für schnelle Debug-Ausgaben oder einfache Anzeigen. Für gut lesbare Listen ist es meist besser, die Elemente mit Intl.NumberFormat einzeln zu formatieren und mit Intl.ListFormat oder einem eigenen Trennzeichen zu verbinden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locales | string | string[] | Intl.Locale | undefined | Standard-Locale der Laufzeitumgebung | BCP-47-Sprachcode (z. B. 'de-DE') oder eine Liste davon. Wird an Number.prototype.toLocaleString() bzw. BigInt.prototype.toLocaleString() weitergereicht. |
| $options | Intl.NumberFormatOptions | undefined | {} | Formatierungsoptionen wie bei Intl.NumberFormat, z. B. style, currency, unit, minimumFractionDigits, maximumFractionDigits. |
Rückgabewert
"" zurückgegeben.Beispiele
Grundlegende Formatierung in verschiedenen Locales
const werte = new Uint32Array([1234, 5678, 90000]);
console.log(werte.toLocaleString('en-US'));
console.log(werte.toLocaleString('de-DE'));
// Zum Vergleich: toString() formatiert nicht
console.log(werte.toString());
Währungsformat für Messwerte aus einem Float64Array
const preise = new Float64Array([1234.5, 99.99, 0.5]);
const text = preise.toLocaleString('de-DE', {
style: 'currency',
currency: 'EUR',
});
console.log(text);
BigInt64Array formatieren
const zaehler = new BigInt64Array([1234567890123n, -42n]);
console.log(zaehler.toLocaleString('de-DE'));
Lesbare Liste mit eigenem Trennzeichen (empfohlen für UIs)
const temperaturen = new Float32Array([21.5, 19.25, 23]);
const fmt = new Intl.NumberFormat('de-DE', {
style: 'unit',
unit: 'celsius',
maximumFractionDigits: 1,
});
// Elemente einzeln formatieren und mit Intl.ListFormat verbinden
const teile = Array.from(temperaturen, (t) => fmt.format(t));
const liste = new Intl.ListFormat('de-DE', { type: 'conjunction' }).format(teile);
console.log(liste);
// Wichtig · Fallstricke
- Trennzeichen immer Komma: Die Elemente werden unabhängig von der Locale mit
,verbunden. Mit'de-DE'ergibt sich deshalb z. B."1,5,2,5"für[1.5, 2.5], was sich nicht eindeutig lesen lässt. Für Anzeigen die Elemente lieber einzeln formatieren (siehe letztes Beispiel). - Rundung: Ohne Optionen formatiert
Intl.NumberFormatmit höchstens 3 Nachkommastellen.new Float64Array([1.23456]).toLocaleString('en-US')liefert"1.235". Das kaschiert auch Ungenauigkeiten vonFloat32Array, bei denentoString()z. B.0.10000000149011612anzeigen würde. - Uneinheitliche Ausgaben: Ohne
localeshängt das Ergebnis von der Umgebung ab (Browser-Sprache, Node.js-ICU-Build). Für reproduzierbare Ausgaben, z. B. in Tests, immer eine Locale angeben. Die Leerzeichen vor Währungssymbolen und Einheiten sind oft geschützte Leerzeichen (U+00A0). - Performance: Bei großen Arrays wird für jedes Element eine eigene Formatierung aufgerufen. Das ist langsam. Besser ist es, eine
Intl.NumberFormat-Instanz einmal zu erzeugen und wiederzuverwenden. - Auf einem typisierten Array mit abgetrenntem (detached)
ArrayBufferwird einTypeErrorausgelöst. Die Methode wird in allen modernen Browsern und in Node.js unterstützt.