Signatur
Beschreibung
Die Eigenschaft quota gehört zur Schnittstelle QuotaExceededError. Diese Schnittstelle erbt von DOMException. Browser werfen einen solchen Fehler, wenn eine Speicheroperation das Kontingent überschreiten würde, das das System festgelegt hat. Das passiert zum Beispiel bei localStorage.setItem(), in IndexedDB oder bei der Cache API. quota gibt dieses Kontingent in Bytes an, und zwar als Zahl (number).
Laut WebIDL ist die Eigenschaft als double? definiert, sie kann also auch leer sein. Legt der Browser das Kontingent nicht offen, etwa aus Datenschutzgründen oder weil es keinen festen Wert gibt, liefert die Eigenschaft null. Die ergänzende Eigenschaft requested gibt an, wie viele Bytes die fehlgeschlagene Operation insgesamt gebraucht hätte. Aus beiden Werten zusammen lässt sich ausrechnen, wie viel Speicher fehlt.
In der Praxis nutzt man quota vor allem zur Fehlerbehandlung und Diagnose. Man kann gezielt alte Cache-Einträge löschen, den Nutzer informieren oder die Werte an ein Monitoring-System melden. Früher war ein solcher Fehler nur ein DOMException mit name === "QuotaExceededError". Robuster Code prüft deshalb beide Varianten.
Rückgabewert
null. Die Eigenschaft ist schreibgeschützt.Beispiele
localStorage-Überlauf abfangen und Kontingent auslesen
const speichern = (schluessel, wert) => {
try {
localStorage.setItem(schluessel, wert);
return true;
} catch (err) {
// Neue Schnittstelle oder ältere DOMException-Variante
const istQuotaFehler =
(typeof QuotaExceededError !== 'undefined' && err instanceof QuotaExceededError) ||
(err instanceof DOMException && err.name === 'QuotaExceededError');
if (!istQuotaFehler) throw err;
if (err.quota != null) {
console.warn(`Kontingent von ${err.quota} Bytes überschritten.`);
} else {
console.warn('Speicherkontingent überschritten (Größe unbekannt).');
}
return false;
}
};
// Etwa 10 MB Text – übersteigt das übliche localStorage-Limit
speichern('grosseDaten', 'x'.repeat(10 * 1024 * 1024));
Fehlende Bytes aus quota und requested berechnen
const berichteSpeichermangel = (err) => {
const { quota, requested } = err;
if (quota == null || requested == null) {
return 'Speicher voll – genaue Werte nicht verfügbar.';
}
const fehlendKB = ((requested - quota) / 1024).toFixed(1);
return `Es fehlen ${fehlendKB} KB (Limit: ${quota} Bytes, benötigt: ${requested} Bytes).`;
};
// Fehler selbst erzeugen, z. B. für Tests
const fehler = new QuotaExceededError('Speicher voll', {
quota: 1_048_576,
requested: 1_310_720,
});
console.log(berichteSpeichermangel(fehler));
Konstruktor ohne Kontingent: quota ist null
const fehler = new QuotaExceededError('Cache voll');
console.log(fehler.name); // Name des Fehlers
console.log(fehler.quota); // nicht angegeben
console.log(fehler instanceof DOMException);
// Schreibgeschützt: die Zuweisung wird ignoriert (im Strict Mode: TypeError)
fehler.quota = 42;
console.log(fehler.quota);
// Wichtig · Fallstricke
- Browser-Unterstützung:
QuotaExceededErrorist eine eigene Schnittstelle mit den Eigenschaftenquotaundrequested. Sie wurde erst kürzlich standardisiert und ist noch nicht in allen Browsern verfügbar. Ältere Browser werfen stattdessen einen normalenDOMExceptionmitname === "QuotaExceededError". Dort istquotadannundefined. Vor dem Zugriff sollte man daher mittypeof QuotaExceededError !== 'undefined'prüfen, ob die Schnittstelle existiert. Für den Wert selbst deckterr.quota != nullsowohlnullals auchundefinedab. - Datenschutz: Browser dürfen das tatsächliche Kontingent verbergen oder nur einen gerundeten Wert melden, um Fingerprinting zu erschweren. Der Wert eignet sich für Diagnose und Fehlerbehandlung, aber nicht für eine exakte Speicherplanung. Dafür ist
navigator.storage.estimate()besser geeignet. - Konstruktor-Prüfungen: Bei
new QuotaExceededError(message, { quota, requested })wirft der Browser einenRangeError, wennquotaoderrequestednegativ ist. Das gilt auch, wenn beide angegeben sind undrequestedkleiner alsquotaist. - Die Einheit ist immer Bytes. Bei
localStoragezählen Browser die Zeichen oft als UTF-16. Ein Zeichen belegt dann 2 Bytes, und die Rechnung weicht von der String-Länge ab.