Signatur
Beschreibung
Beim Erzeugen eines Intl.NumberFormat-Objekts handelt die Laufzeitumgebung die gewünschten Optionen mit den tatsächlich unterstützten Möglichkeiten aus: Die angeforderte Locale wird auf eine verfügbare abgebildet, fehlende Optionen erhalten Standardwerte, und abhängige Werte wie minimumFractionDigits werden aus Stil und Währung abgeleitet. resolvedOptions() zeigt genau dieses Ergebnis der Auflösung – also nicht das, was man übergeben hat, sondern das, womit tatsächlich formatiert wird.
Das zurückgegebene Objekt enthält unter anderem locale, numberingSystem, style, currency/currencyDisplay/currencySign (nur bei style: "currency"), unit/unitDisplay (nur bei style: "unit"), minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, gegebenenfalls minimumSignificantDigits/maximumSignificantDigits, useGrouping, notation, compactDisplay (nur bei notation: "compact"), signDisplay sowie seit ES2023 roundingIncrement, roundingMode, roundingPriority und trailingZeroDisplay.
Typische Einsatzzwecke sind: prüfen, welche Locale der Browser wirklich verwendet (Fallback-Erkennung), die Anzahl der Nachkommastellen einer Währung ermitteln (z. B. für Eingabefelder), Debugging von Formatierungsproblemen sowie das Klonen bzw. Ableiten eines neuen Formatierers mit leicht veränderten Einstellungen.
Rückgabewert
style und notation ab.Beispiele
Aufgelöste Optionen eines Währungsformatierers anzeigen
const eur = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' });
const opts = eur.resolvedOptions();
console.log(opts.locale);
console.log(opts.style, opts.currency, opts.currencyDisplay);
console.log(opts.minimumFractionDigits, opts.maximumFractionDigits);
console.log(opts.useGrouping);
Nachkommastellen einer Währung für ein Eingabefeld ermitteln
const getCurrencyDigits = (currency) =>
new Intl.NumberFormat('en', { style: 'currency', currency })
.resolvedOptions().maximumFractionDigits;
console.log(getCurrencyDigits('EUR')); // Cent
console.log(getCurrencyDigits('JPY')); // keine Untereinheit
console.log(getCurrencyDigits('BHD')); // Fils
// z. B. für <input type="number" step="...">
const step = 10 ** -getCurrencyDigits('EUR');
console.log(step);
Locale-Fallback erkennen
const requested = 'tlh-KX'; // exotische/nicht unterstützte Locale
const nf = new Intl.NumberFormat([requested, 'de-DE']);
const { locale, numberingSystem } = nf.resolvedOptions();
if (locale !== requested) {
console.log(`Fallback aktiv: ${locale} (Zahlensystem: ${numberingSystem})`);
}
Formatierer mit veränderten Optionen ableiten
const base = new Intl.NumberFormat('de-DE', {
style: 'unit',
unit: 'kilometer-per-hour',
maximumFractionDigits: 1
});
// Optionen übernehmen und nur die Darstellung ändern
const { locale, ...rest } = base.resolvedOptions();
const long = new Intl.NumberFormat(locale, { ...rest, unitDisplay: 'long' });
console.log(base.format(88.46));
console.log(long.format(88.46));
// Wichtig · Fallstricke
- Aufgelöst ≠ übergeben: Ungültige Kombinationen werfen bereits im Konstruktor einen
RangeError/TypeError; nicht unterstützte Locales führen dagegen stillschweigend zu einem Fallback.resolvedOptions().localeist daher der zuverlässige Weg, die tatsächliche Locale zu erfahren. - Unicode-Erweiterungen: Die Locale kann
-u-nu-…-Erweiterungen enthalten (z. B."ar-EG-u-nu-arab"), wenn sie das Ergebnis beeinflussen. Beim Vergleich von Locale-Strings ggf.new Intl.Locale(locale).baseNameverwenden. - Werte ändern sich mit der Spezifikation:
useGroupingwar früher einboolean, seit ES2023 (NumberFormat v3) ist es meist ein String wie"auto","always"oder"min2"(bzw.false). Neue Eigenschaften wieroundingMode,roundingPriorityundtrailingZeroDisplayfehlen in älteren Engines (vor ca. Chrome 106, Firefox 116, Safari 15.4). Code sollte deshalb nicht auf exakte Objektgleichheit prüfen. - Bedingte Eigenschaften:
currency,unit,compactDisplayoder die signifikanten Stellen sind nur vorhanden, wenn sie für die Konfiguration relevant sind – vor dem Zugriff aufundefinedprüfen. - Das Objekt ist bei jedem Aufruf neu; für häufige Abfragen das Ergebnis zwischenspeichern.