Start · Sprachen · JavaScript · Referenz · DOMStringList.length

DOMStringList.length

Eigenschaft

Die schreibgeschützte Eigenschaft <code>length</code> gibt die Anzahl der Zeichenfolgen in einer <code>DOMStringList</code> als ganze Zahl zurück.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

get DOMStringList.prototype.length

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

Typ
number
Beschreibung
Eine nicht negative ganze Zahl (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();
};
Object Stores: 2

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();
};
0: bestellungen 1: produkte

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.');
}
Seite läuft nicht in einem Frame.

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();
};
TypeError 2

// Wichtig · Fallstricke

  • Kein echtes Array: DOMStringList bietet kein map(), filter() und kein forEach(). Wenn du Array-Methoden brauchst, wandle die Liste vorher um, etwa mit Array.from(list) oder [...list] (die Liste ist iterierbar).
  • Schreibgeschützt: Eine Zuweisung an length hat keine Wirkung, im Strict Mode gibt es einen TypeError.
  • Momentaufnahme: IDBDatabase.objectStoreNames zeigt den Stand zum Zeitpunkt des Zugriffs. Nachdem du in onupgradeneeded Stores angelegt oder gelöscht hast, liest du die Eigenschaft am besten neu aus.
  • Kompatibilität: DOMStringList.length funktioniert in allen modernen Browsern und in Web Workern. location.ancestorOrigins fehlt aber in Firefox, deshalb solltest du die Unterstützung vorher prüfen. DataTransfer.types war in alten Firefox-Versionen eine DOMStringList, heute ist es ein eingefrorenes Array.
  • Zum Prüfen, ob ein bestimmter Eintrag enthalten ist, ist contains(string) lesbarer als eine Schleife über length.