Signatur
Beschreibung
DOMStringList.length liefert die Anzahl der Einträge in einer DOMStringList. Das ist eine einfache, nur lesbare Liste von Zeichenfolgen. Du begegnest ihr vor allem in IndexedDB (IDBDatabase.objectStoreNames, IDBObjectStore.indexNames, IDBTransaction.objectStoreNames) und bei Location.ancestorOrigins.
Typische Einsatzfälle: Du prüfst, ob eine Datenbank überhaupt Object Stores enthält, oder du gehst mit einer klassischen for-Schleife über alle Einträge, zusammen mit item(index) oder dem Indexzugriff list[i]. Gültige Indizes reichen von 0 bis length - 1.
Die Eigenschaft ist schreibgeschützt. Anders als bei einem Array kannst du die Liste nicht kürzen, indem du length einen neuen Wert zuweist. Die Zuweisung wird ignoriert, im Strict Mode wirft sie einen TypeError.
Rückgabewert
unsigned long): die Anzahl der Zeichenfolgen in der Liste. Bei einer leeren Liste ist der Wert 0.Beispiele
Anzahl der Object Stores in IndexedDB ermitteln
const request = indexedDB.open('shop', 1);
request.onupgradeneeded = () => {
const db = request.result;
db.createObjectStore('produkte', { keyPath: 'id' });
db.createObjectStore('bestellungen', { autoIncrement: true });
};
request.onsuccess = () => {
const db = request.result;
const stores = db.objectStoreNames; // DOMStringList
console.log(`Object Stores: ${stores.length}`);
db.close();
};
Alle Einträge per for-Schleife und item() durchlaufen
const listeStores = (db) => {
const names = db.objectStoreNames;
for (let i = 0; i < names.length; i++) {
console.log(`${i}: ${names.item(i)}`);
}
};
const req = indexedDB.open('shop');
req.onsuccess = () => {
listeStores(req.result);
req.result.close();
};
Prüfen, ob die Seite in einem Frame eingebettet ist (ancestorOrigins)
if ('ancestorOrigins' in location) {
const origins = location.ancestorOrigins;
if (origins.length === 0) {
console.log('Seite läuft nicht in einem Frame.');
} else {
console.log(`Eingebettet von ${origins.length} Ebene(n), direkt von: ${origins[0]}`);
}
} else {
console.log('location.ancestorOrigins wird nicht unterstützt.');
}
length ist schreibgeschützt
'use strict';
const req = indexedDB.open('shop');
req.onsuccess = () => {
const names = req.result.objectStoreNames;
try {
names.length = 0;
} catch (err) {
console.log(err.name); // Zuweisung ist nicht erlaubt
}
console.log(names.length); // unverändert
req.result.close();
};
// Wichtig · Fallstricke
- Kein echtes Array:
DOMStringListbietet keinmap(),filter()und keinforEach(). Wenn du Array-Methoden brauchst, wandle die Liste vorher um, etwa mitArray.from(list)oder[...list](die Liste ist iterierbar). - Schreibgeschützt: Eine Zuweisung an
lengthhat keine Wirkung, im Strict Mode gibt es einenTypeError. - Momentaufnahme:
IDBDatabase.objectStoreNameszeigt den Stand zum Zeitpunkt des Zugriffs. Nachdem du inonupgradeneededStores angelegt oder gelöscht hast, liest du die Eigenschaft am besten neu aus. - Kompatibilität:
DOMStringList.lengthfunktioniert in allen modernen Browsern und in Web Workern.location.ancestorOriginsfehlt aber in Firefox, deshalb solltest du die Unterstützung vorher prüfen.DataTransfer.typeswar in alten Firefox-Versionen eineDOMStringList, heute ist es ein eingefrorenes Array. - Zum Prüfen, ob ein bestimmter Eintrag enthalten ist, ist
contains(string)lesbarer als eine Schleife überlength.