Start · Sprachen · JavaScript · Referenz · DOMStringList.item()

DOMStringList.item()

Methode

Gibt den String an der Position <code>index</code> einer <code>DOMStringList</code> zurück. Liegt der Index außerhalb der Liste, ist das Ergebnis <code>null</code>.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

DOMStringList.prototype.item(index)

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

Typ
string | null
Beschreibung
Der String an der angegebenen Position. Ist 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
};
0 bestellungen 1 produkte null

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
};
true null 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');
}
Eltern: https://example.com Oberstes Fenster: https://example.com

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'));
};
["BESTELLUNGEN", "PRODUKTE"] true

// Wichtig · Fallstricke

  • Ohne Argument: Ein Aufruf von item() ohne Argument wirft einen TypeError.
  • Typumwandlung: Der Index wird in einen unsigned long umgewandelt. Dadurch entstehen überraschende Ergebnisse:
    • item(-1) wird zu 4294967295 und gibt deshalb null zurück, nicht das letzte Element.
    • item('abc') oder item(NaN) ergibt den Index 0 und damit den ersten Eintrag.
    • item(1.7) wird auf 1 abgeschnitten.
  • null und undefined: item() liefert außerhalb der Liste null, list[i] dagegen undefined. Beachten Sie das bei strikten Vergleichen.
  • Sortierung: objectStoreNames und indexNames sind 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: DOMStringList mit item() wird in allen modernen Browsern unterstützt. location.ancestorOrigins fehlt in Firefox jedoch lange Zeit bzw. ist dort nur eingeschränkt verfügbar. Prüfen Sie deshalb vorher, ob die Eigenschaft existiert. DataTransfer.types liefert in aktuellen Browsern ein eingefrorenes Array statt einer DOMStringList.