Start · Sprachen · JavaScript · Referenz · StorageEvent.newValue

StorageEvent.newValue

Eigenschaft

Schreibgeschützte Eigenschaft, die den neuen Wert eines geänderten Speicherschlüssels als String liefert – oder <code>null</code>, wenn der Schlüssel entfernt wurde.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

StorageEvent.newValue

Beschreibung

Die Eigenschaft newValue eines StorageEvent-Objekts enthält den Wert, den ein Schlüssel in localStorage oder sessionStorage nach der Änderung besitzt. Zusammen mit key und oldValue lässt sich so genau nachvollziehen, was sich geändert hat.

Das storage-Ereignis wird nur in anderen Dokumenten (Tabs, Fenstern, iframes) desselben Ursprungs ausgelöst, nicht in dem Dokument, das die Änderung vorgenommen hat. Deshalb eignet sich newValue gut zur Synchronisation zwischen Tabs, etwa für Abmeldungen, Designwechsel (hell/dunkel) oder Warenkorbzustände.

Der Wert ist immer ein string, weil Web Storage nur Strings speichert. Strukturierte Daten müssen daher mit JSON.parse() zurückverwandelt werden. Wird ein Schlüssel über removeItem() gelöscht oder der ganze Speicher mit clear() geleert, ist newValue null.

Rückgabewert

Typ
string | null
Beschreibung
Der neue Wert des Schlüssels als String; null, wenn der Schlüssel entfernt oder der Speicher per clear() geleert wurde.

Beispiele

Änderungen aus anderen Tabs protokollieren

// In Tab A ausführen:
window.addEventListener('storage', (event) => {
  console.log(`Schlüssel: ${event.key}`);
  console.log(`Alt: ${event.oldValue}`);
  console.log(`Neu: ${event.newValue}`);
});

// In Tab B (gleicher Ursprung) ausführen:
// localStorage.setItem('theme', 'dark');
Schlüssel: theme Alt: light Neu: dark

Abmeldung über alle Tabs synchronisieren

window.addEventListener('storage', (event) => {
  // Token wurde in einem anderen Tab entfernt
  if (event.key === 'authToken' && event.newValue === null) {
    console.log('Sitzung beendet – Weiterleitung zur Anmeldung');
    window.location.assign('/login');
  }
});

// Im anderen Tab beim Abmelden:
// localStorage.removeItem('authToken');
Sitzung beendet – Weiterleitung zur Anmeldung

JSON-Daten sicher auswerten

const parseSafe = (value) => {
  if (value === null) return null;
  try {
    return JSON.parse(value);
  } catch {
    return null;
  }
};

window.onstorage = (event) => {
  if (event.key !== 'cart') return;
  const cart = parseSafe(event.newValue) ?? [];
  console.log(`Warenkorb enthält jetzt ${cart.length} Artikel`);
};

// Anderer Tab:
// localStorage.setItem('cart', JSON.stringify([{ id: 1 }, { id: 2 }]));
Warenkorb enthält jetzt 2 Artikel

clear() erkennen

window.addEventListener('storage', (event) => {
  // Bei clear() sind key, oldValue und newValue alle null
  if (event.key === null) {
    console.log('Gesamter Speicher wurde geleert');
    return;
  }
  console.log(`${event.key} → ${event.newValue}`);
});
Gesamter Speicher wurde geleert

// Wichtig · Fallstricke

  • Kein Ereignis im auslösenden Tab: Das Dokument, das setItem() aufruft, erhält selbst kein storage-Ereignis. Für Benachrichtigungen im selben Tab eigene Ereignisse oder einen BroadcastChannel verwenden.
  • Nur Strings: newValue ist immer ein String oder null. Zahlen oder Booleans kommen als "42" bzw. "true" an.
  • Gleicher Wert: Wird ein Schlüssel auf denselben Wert gesetzt, wird in der Regel kein Ereignis ausgelöst.
  • sessionStorage: Ereignisse werden nur zwischen Dokumenten derselben Sitzung (z. B. iframes im selben Tab) verteilt, nicht zwischen separaten Tabs.
  • Sicherheit: Werte aus dem Speicher können von beliebigem Skript desselben Ursprungs gesetzt worden sein. newValue nie ungeprüft in innerHTML einsetzen (XSS-Gefahr) und JSON.parse() in try/catch kapseln.
  • Die Eigenschaft ist schreibgeschützt und wird in allen modernen Browsern unterstützt.