Signatur
Beschreibung
item() liest einen einzelnen Eintrag aus einer DOMStringList. Das ist eine schreibgeschützte, arrayähnliche Liste von Strings. Solche Listen bekommen Sie vor allem von IndexedDB zurück (IDBDatabase.objectStoreNames, IDBObjectStore.indexNames, IDBTransaction.objectStoreNames) und von location.ancestorOrigins.
Die Methode entspricht dem Zugriff mit eckigen Klammern (list[index]). Es gibt aber einen wichtigen Unterschied: Liegt der Index außerhalb der Liste, gibt item() null zurück, der Klammerzugriff dagegen undefined. Das ist hilfreich, wenn Ihr Code ausdrücklich auf null prüft.
Eine DOMStringList ist kein echtes Array. Methoden wie map(), filter() oder includes() gibt es darauf nicht. Um Einträge nacheinander zu durchlaufen, nutzen Sie eine Zählschleife mit length und item(), oder Sie wandeln die Liste mit Array.from() in ein Array um. Ob ein bestimmter String enthalten ist, prüfen Sie mit contains().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $index Pflicht | number | Position des gewünschten Eintrags, beginnend bei 0. Der Wert wird nach den WebIDL-Regeln in einen unsigned long umgewandelt, also in eine ganze Zahl ohne Vorzeichen. |
Rückgabewert
index größer oder gleich length, gibt die Methode null zurück.Beispiele
Namen der Object Stores einer IndexedDB-Datenbank auflisten
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 names = request.result.objectStoreNames; // DOMStringList
for (let i = 0; i < names.length; i++) {
console.log(i, names.item(i));
}
console.log(names.item(99)); // außerhalb der Liste
};
item() im Vergleich zum Klammerzugriff
const request = indexedDB.open('shop');
request.onsuccess = () => {
const names = request.result.objectStoreNames;
console.log(names.item(0) === names[0]); // gleicher Wert
console.log(names.item(names.length)); // null
console.log(names[names.length]); // undefined
};
Herkunft der übergeordneten Fenster in einem iframe auslesen
// Läuft innerhalb eines eingebetteten iframes
const origins = location.ancestorOrigins;
if (origins && origins.length > 0) {
const direkterEltern = origins.item(0);
const oberstesFenster = origins.item(origins.length - 1);
console.log('Eltern:', direkterEltern);
console.log('Oberstes Fenster:', oberstesFenster);
} else {
console.log('Kein iframe oder API nicht verfügbar');
}
In ein echtes Array umwandeln und weiterverarbeiten
const request = indexedDB.open('shop');
request.onsuccess = () => {
const names = request.result.objectStoreNames;
const upper = Array.from(names, (name) => name.toUpperCase());
console.log(upper);
console.log(names.contains('produkte'));
};
// Wichtig · Fallstricke
- Ohne Argument: Ein Aufruf von
item()ohne Argument wirft einenTypeError. - Typumwandlung: Der Index wird in einen
unsigned longumgewandelt. Dadurch entstehen überraschende Ergebnisse:item(-1)wird zu 4294967295 und gibt deshalbnullzurück, nicht das letzte Element.item('abc')oderitem(NaN)ergibt den Index0und damit den ersten Eintrag.item(1.7)wird auf1abgeschnitten.
nullundundefined:item()liefert außerhalb der Listenull,list[i]dagegenundefined. Beachten Sie das bei strikten Vergleichen.- Sortierung:
objectStoreNamesundindexNamessind alphabetisch sortiert, nicht in der Reihenfolge, in der die Stores angelegt wurden. - Kein echtes Array: Array-Methoden fehlen. Wandeln Sie die Liste bei Bedarf mit
Array.from()um. - Kompatibilität:
DOMStringListmititem()wird in allen modernen Browsern unterstützt.location.ancestorOriginsfehlt in Firefox jedoch lange Zeit bzw. ist dort nur eingeschränkt verfügbar. Prüfen Sie deshalb vorher, ob die Eigenschaft existiert.DataTransfer.typesliefert in aktuellen Browsern ein eingefrorenes Array statt einerDOMStringList.