Start · Sprachen · JavaScript · Referenz · Intl.Locale.prototype.numeric

Intl.Locale.prototype.numeric

Eigenschaft

Gibt als <code>boolean</code> zurück, ob die Locale eine numerische Sortierung (Unicode-Erweiterung <code>kn</code>) aktiviert, bei der Ziffernfolgen nach ihrem Zahlenwert verglichen werden.

seit JavaScript ES2020 (Intl.Locale) – Baseline: alle modernen Bro Kategorie: method-property

Signatur

get Intl.Locale.prototype.numeric

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);
true false false

Ü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());
true de-u-kn

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));
true true [ 'Bericht1.pdf', 'Bericht2.pdf', 'Bericht10.pdf' ]

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);
TypeError true en-US

// Wichtig · Fallstricke

  • Nur lesbar: numeric ist ein Getter auf dem Prototyp. Eine Zuweisung wird außerhalb des Strict Mode stillschweigend ignoriert und löst im Strict Mode einen TypeError aus.
  • Nicht gesetzt oder ausdrücklich false? In beiden Fällen liefert die Eigenschaft false. Ob kn ausdrücklich angegeben wurde, sieht man nur an locale.toString().
  • Schreibweise im Tag: -u-kn ohne Wert bedeutet true. Bei der Ausgabe wird kn-true zu kn gekürzt.
  • Zusammenspiel mit Intl.Collator: Eine numeric-Option, die man direkt an den Collator übergibt, hat Vorrang vor der kn-Einstellung der Locale. Andere APIs wie Intl.NumberFormat oder Intl.DateTimeFormat beachten diese Einstellung nicht.
  • Kompatibilität: Intl.Locale gibt es in Chrome 74+, Firefox 75+, Safari 14+ und Node.js 12+. Ältere Umgebungen brauchen ein Polyfill, z. B. @formatjs/intl-locale.