Start · Sprachen · JavaScript · Referenz · IDBIndex.isAutoLocale

IDBIndex.isAutoLocale

Eigenschaft

Schreibgeschützter boolescher Wert: <code>true</code>, wenn der Index mit <code>locale: "auto"</code> erstellt wurde, sonst <code>false</code>.

seit JavaScript Nicht standardisiert: nur Firefox 43+ und nur hint deprecated seit ja Kategorie: webapi

Signatur

IDBIndex.isAutoLocale

Beschreibung

Die schreibgeschützte Eigenschaft isAutoLocale eines IDBIndex-Objekts zeigt an, ob der Index mit der Option locale: "auto" angelegt wurde. Diese Option übergibt man an IDBObjectStore.prototype.createIndex(). Mit "auto" sortiert der Index Zeichenketten nach der Sprache, die gerade im Browser eingestellt ist. Ohne diese Option sortiert er nach reinen Zeichencodes (binär).

Die Eigenschaft gehört zu einer experimentellen Erweiterung von Firefox für sprachabhängig sortierte Indizes. Nützlich ist sie vor allem zur Fehlersuche und zur Prüfung, ob ein Index so angelegt wurde wie gedacht. Bei locale: "auto" enthält IDBIndex.locale das tatsächlich verwendete Gebietsschema (z. B. "de-DE"). An isAutoLocale erkennt man dagegen, ob dieser Wert automatisch ermittelt oder ausdrücklich angegeben wurde.

Die Eigenschaft ist nur lesbar. Nachträglich ändern lässt sich das Verhalten nicht. Um die Sortierung zu ändern, löscht man den Index in einem upgradeneeded-Handler mit deleteIndex() und legt ihn mit anderen Optionen neu an.

Rückgabewert

Typ
boolean | undefined
Beschreibung
true, wenn der Index mit locale: "auto" erstellt wurde, sonst false. In Browsern ohne diese Funktion ist die Eigenschaft nicht vorhanden und liefert deshalb undefined.

Beispiele

Index mit locale: "auto" anlegen und prüfen

const request = indexedDB.open('kontakte', 1);

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  const store = db.createObjectStore('personen', { keyPath: 'id', autoIncrement: true });
  // Sortierung nach der aktuellen Browsersprache (nur Firefox, experimentell)
  const index = store.createIndex('nachname', 'nachname', { locale: 'auto' });
  console.log('isAutoLocale:', index.isAutoLocale);
  console.log('locale:', index.locale);
};
isAutoLocale: true locale: de-DE

Vorhandenen Index in einer Transaktion auslesen

const oeffneDb = () => new Promise((resolve, reject) => {
  const req = indexedDB.open('kontakte', 1);
  req.onsuccess = () => resolve(req.result);
  req.onerror = () => reject(req.error);
});

const db = await oeffneDb();
const index = db
  .transaction('personen', 'readonly')
  .objectStore('personen')
  .index('nachname');

console.log(`Index "${index.name}" – auto-Locale: ${index.isAutoLocale}`);
Index "nachname" – auto-Locale: true

Prüfen, ob die Funktion vorhanden ist, mit Ausweichlösung

const unterstuetztLocaleIndex = 'isAutoLocale' in IDBIndex.prototype;

const sortiereNamen = (namen) => unterstuetztLocaleIndex
  ? namen // Reihenfolge kommt bereits sprachgerecht aus dem Index
  : [...namen].sort(new Intl.Collator('de').compare);

console.log(unterstuetztLocaleIndex);
console.log(sortiereNamen(['Zöller', 'Adler', 'Öztürk', 'Müller']));
false ["Adler", "Müller", "Öztürk", "Zöller"]

// Wichtig · Fallstricke

  • Nicht standardisiert: isAutoLocale steht in keiner Spezifikation. Nur Firefox kennt die Eigenschaft, und auch dort nur mit aktiviertem Schalter dom.indexedDB.experimental. Chrome, Edge und Safari unterstützen sie nicht, dort ist der Wert undefined. Für Seiten im Produktivbetrieb ist sie nicht geeignet.
  • In Browsern ohne diese Funktion wird die Option locale bei createIndex() stillschweigend ignoriert. Der Index sortiert dann binär, also nach Zeichencodes. Umlaute wie „Ö“ landen dabei hinter „Z“. Wer eine sprachgerechte Reihenfolge braucht, sortiert die Daten nach dem Auslesen mit Intl.Collator.
  • Die Sortierung wird beim Anlegen des Index festgelegt. Ändert der Nutzer später die Browsersprache, wird ein bestehender Index nicht automatisch neu sortiert.
  • Man sollte das Vorhandensein der Funktion immer prüfen ('isAutoLocale' in IDBIndex.prototype), statt vom Browsernamen auf die Unterstützung zu schließen.