Start · Sprachen · JavaScript · Referenz · Intl.NumberFormat.prototype.resolvedOptions()

Intl.NumberFormat.prototype.resolvedOptions()

Methode

Gibt ein neues Objekt mit den tatsächlich verwendeten Optionen (Locale, Zahlensystem, Stil, Nachkommastellen usw.) einer <code>Intl.NumberFormat</code>-Instanz zurück.

seit JavaScript ES Internationalization API 1.0 (ECMA-402, 2012); Kategorie: method-property

Signatur

Intl.NumberFormat.prototype.resolvedOptions()

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

Typ
Object
Beschreibung
Ein neues einfaches Objekt mit den aufgelösten Optionen. Änderungen daran wirken sich nicht auf den Formatierer aus. Welche Eigenschaften vorhanden sind, hängt von 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);
de-DE currency EUR symbol 2 2 auto

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);
2 0 3 0.01

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})`);
}
Fallback aktiv: de-DE (Zahlensystem: latn)

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));
88,5 km/h 88,5 Kilometer pro Stunde

// 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().locale ist 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).baseName verwenden.
  • Werte ändern sich mit der Spezifikation: useGrouping war früher ein boolean, seit ES2023 (NumberFormat v3) ist es meist ein String wie "auto", "always" oder "min2" (bzw. false). Neue Eigenschaften wie roundingMode, roundingPriority und trailingZeroDisplay fehlen 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, compactDisplay oder die signifikanten Stellen sind nur vorhanden, wenn sie für die Konfiguration relevant sind – vor dem Zugriff auf undefined prüfen.
  • Das Objekt ist bei jedem Aufruf neu; für häufige Abfragen das Ergebnis zwischenspeichern.