Signatur
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
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);
};
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}`);
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']));
// Wichtig · Fallstricke
- Nicht standardisiert:
isAutoLocalesteht in keiner Spezifikation. Nur Firefox kennt die Eigenschaft, und auch dort nur mit aktiviertem Schalterdom.indexedDB.experimental. Chrome, Edge und Safari unterstützen sie nicht, dort ist der Wertundefined. Für Seiten im Produktivbetrieb ist sie nicht geeignet. - In Browsern ohne diese Funktion wird die Option
localebeicreateIndex()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 mitIntl.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.