Signatur
Beschreibung
Die Zugriffseigenschaft numeric einer Intl.Locale-Instanz gibt an, ob für diese Locale die numerische Kollation aktiviert ist. Dann werden Ziffernfolgen in Zeichenketten nach ihrem Zahlenwert sortiert und nicht Zeichen für Zeichen. So kommt "Datei2" vor "Datei10", obwohl ein rein lexikografischer Vergleich die umgekehrte Reihenfolge ergäbe.
Der Wert stammt entweder aus dem Unicode-Erweiterungsschlüssel kn im BCP-47-Sprach-Tag (z. B. "de-DE-u-kn" oder "de-u-kn-true") oder aus der Option numeric im zweiten Argument des Konstruktors new Intl.Locale(tag, { numeric: true }). Wenn beides angegeben ist, hat die Option Vorrang.
Die Eigenschaft wird gebraucht, wenn man eine Locale-Konfiguration prüfen oder weiterreichen möchte, etwa an Intl.Collator. Dieser übernimmt die kn-Einstellung aus der Locale, sofern man ihm nicht selbst eine eigene numeric-Option mitgibt. Die Eigenschaft kann nur gelesen werden. Um den Wert zu ändern, erzeugt man eine neue Locale.
Beispiele
Wert aus dem Sprach-Tag auslesen
const mitKn = new Intl.Locale("de-DE-u-kn");
const mitKnFalse = new Intl.Locale("de-DE-u-kn-false");
const ohneKn = new Intl.Locale("de-DE");
console.log(mitKn.numeric);
console.log(mitKnFalse.numeric);
console.log(ohneKn.numeric);
Über die Konstruktor-Option setzen (Option schlägt Tag)
const locale = new Intl.Locale("de-u-kn-false", { numeric: true });
console.log(locale.numeric);
console.log(locale.toString());
Praxis: Dateinamen natürlich sortieren
const dateien = ["Bericht10.pdf", "Bericht2.pdf", "Bericht1.pdf"];
const locale = new Intl.Locale("de", { numeric: true });
console.log(locale.numeric); // Einstellung prüfen
const collator = new Intl.Collator(locale);
console.log(collator.resolvedOptions().numeric);
console.log([...dateien].sort(collator.compare));
Nicht zuweisbar – neue Locale erzeugen
"use strict";
const basis = new Intl.Locale("en-US");
try {
basis.numeric = true; // nur Getter, kein Setter
} catch (err) {
console.log(err.constructor.name);
}
// Richtig: neue Instanz mit geänderter Option
const numerisch = new Intl.Locale(basis, { numeric: true });
console.log(numerisch.numeric, numerisch.baseName);
// Wichtig · Fallstricke
- Nur lesbar:
numericist ein Getter auf dem Prototyp. Eine Zuweisung wird außerhalb des Strict Mode stillschweigend ignoriert und löst im Strict Mode einenTypeErroraus. - Nicht gesetzt oder ausdrücklich
false? In beiden Fällen liefert die Eigenschaftfalse. Obknausdrücklich angegeben wurde, sieht man nur anlocale.toString(). - Schreibweise im Tag:
-u-knohne Wert bedeutettrue. Bei der Ausgabe wirdkn-truezukngekürzt. - Zusammenspiel mit
Intl.Collator: Einenumeric-Option, die man direkt an den Collator übergibt, hat Vorrang vor derkn-Einstellung der Locale. Andere APIs wieIntl.NumberFormatoderIntl.DateTimeFormatbeachten diese Einstellung nicht. - Kompatibilität:
Intl.Localegibt es in Chrome 74+, Firefox 75+, Safari 14+ und Node.js 12+. Ältere Umgebungen brauchen ein Polyfill, z. B.@formatjs/intl-locale.