💾 Clientseitige Persistenz & JSON

JS 10: Web Storage & JSON-Serialisierung

Lerne clientseitige Datenhaltung mit localStorage, sessionStorage und robuster JSON-Verarbeitung für Offline-First Web-Apps.

📂 Dateien dieser Einheit:
📄 aufgabe.js (Startercode) 🧪 test_aufgabe.js (Tests) 💡 musterloesung.js (Lösung) 📖 README.md

1. 📦 localStorage vs. sessionStorage

Moderne Browser stellen zwei Schlüssel-Wert-Speicher zur Verfügung, die rein clientseitig ohne Server-Datenbank arbeiten:

Merkmal localStorage sessionStorage
Lebensdauer Dauerhaft (überlebt Browser-Neustarts) Nur für die Dauer des Browser-Tabs
Scope Same-Origin (über alle Tabs derselben Domain) Isoliert auf den einzelnen Tab
Speicherplatz ca. 5–10 MB pro Origin ca. 5 MB pro Tab
Typischer Einsatz Theme (Dark Mode), Highscores, Entwürfe Mehrschritt-Formulare, temporärer Tab-Status
🔐 Didaktische Analogie: Das Schließfach & das Reisetagebuch

localStorage ist wie ein Bankschließfach: Was du dort ablegst, wartet auch nach Jahren treu auf dich. sessionStorage ist wie ein Reisetagebuch im Zugabteil: Sobald du den Zug verlässt (Tab schließen), verbleibt es im alten Zug und eine neue Fahrt beginnt mit leeren Blättern.

2. 🔄 JSON-Serialisierung komplexer Datenstrukturen

Da Web Storage nur Strings akzeptiert, müssen Objekte und Arrays vor dem Speichern mit JSON.stringify() serialisiert und beim Laden mit JSON.parse() deserialisiert werden:

// 🎯 1. Objekt serialisieren & speichern:
const benutzer = { id: 101, name: "Ada", skills: ["JS", "TS"], aktiv: true };
localStorage.setItem("user_profile", JSON.stringify(benutzer));

// 🎯 2. Laden & Deserialisieren:
const raw = localStorage.getItem("user_profile");
if (raw) {
  const geladenerBenutzer = JSON.parse(raw);
  console.log(geladenerBenutzer.skills[0]); // "JS"
}

// 🎯 3. Einzelnen Schlüssel entfernen:
localStorage.removeItem("user_profile");
💡 Warum kein direktes Speichern von Objekten?

Wenn du localStorage.setItem("obj", { a: 1 }) ohne JSON.stringify aufrufst, ruft JavaScript automatisch .toString() auf. Im Storage landet dann der unbrauchbare String "[object Object]"!

3. 🛡️ Robuste Fehlerbehandlung mit try / catch

Im professionellen Umfeld kann der Inhalt von Storage durch manuelle Benutzer-Eingaben oder veraltete Formate korrupt sein. Defektes JSON wirft beim Parsen einen SyntaxError:

function ladeEinstellungenSicher(key, standardWert) {
  try {
    const raw = localStorage.getItem(key);
    return raw !== null ? JSON.parse(raw) : standardWert;
  } catch (err) {
    console.warn(`Defektes JSON bei Schlüssel "${key}", nutze Standard-Fallback.`, err);
    return standardWert;
  }
}

📑 4. Cheat-Sheet: Web Storage API

Befehl Signatur Beschreibung
setItem storage.setItem(key, value) Schreibt Schlüssel & Wert (als String)
getItem storage.getItem(key) Liest Wert oder liefert null
removeItem storage.removeItem(key) Löscht den Schlüssel aus dem Speicher
clear storage.clear() Leert den gesamten Speicher der Domain
JSON.stringify/parse JSON.stringify(obj) / JSON.parse(str) Objekt-Serialisierung & Deserialisierung

🎯 5. Aufgaben & Checkliste in aufgabe.js

💻 In Web-IDE öffnen → ← Zurück zu JS 09 (DOM & Events) Weiter zu JS 11 (Callbacks & Promises) →