Optional Chaining (?.) und Nullish Coalescing (??) in JavaScript
„Cannot read properties of undefined" gehört zu den häufigsten JS-Fehlern. Mit ?. greifst du sicher auf tief verschachtelte Felder zu, mit ?? setzt du saubere Standardwerte – und vermeidest die klassische ||-Falle bei 0 und "".
Kaum ein Fehler nervt im Frontend so oft wie Cannot read properties of undefined. Er passiert, wenn du auf ein Feld eines Objekts zugreifst, das gar nicht da ist. Zwei kleine Operatoren räumen damit auf.
Optional Chaining: ?.
const daten = await res.json();
// Ohne ?. kracht es, wenn "user" oder "adresse" fehlt:
const stadt = daten.user.adresse.stadt; // 💥
// Mit ?. bricht die Kette sauber ab und liefert undefined:
const stadt = daten?.user?.adresse?.stadt; // undefined statt Absturz?. prüft bei jedem Schritt: Ist der Wert null oder undefined, stoppt die Kette und gibt undefined zurück, statt zu werfen. Funktioniert auch bei Methoden (obj.fn?.()) und Arrays (liste?.[0]).
Nullish Coalescing: ??
const anzahl = daten?.count ?? 10; // 10 nur, wenn count null/undefined ist?? liefert den rechten Wert nur, wenn links null oder undefined steht. Das ist der wichtige Unterschied zu ||:
const menge = eingabe.wert || 10; // ⚠️ bei wert = 0 kommt 10 heraus!
const menge = eingabe.wert ?? 10; // ✅ 0 bleibt 0|| betrachtet auch 0, "" und false als „leer" und ersetzt sie. Wenn 0 oder ein leerer String gültige Werte sind, ist ?? die richtige Wahl.
Zusammen die Alltagszeile
const titel = seite?.meta?.title ?? "Ohne Titel";Diese beiden Operatoren ersparen mir defensive if-Kaskaden und eine ganze Sorte Laufzeitfehler. Mehr JavaScript-Snippets auf code.bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
toSorted, toReversed und with: Arrays sortieren, ohne das Original zu zerstören
array.sort() sortiert nicht eine Kopie, sondern das Array selbst – und genau daran ist schon mancher Zustand im Frontend stillschweigend kaputtgegangen. Seit ES2023 gibt es zu jeder dieser Methoden eine Variante, die eine Kopie zurückgibt.
Aufzählungen richtig verketten mit Intl.ListFormat
"a, b und c" von Hand zusammenzubauen geht fast immer schief – bei einem Element, bei zwei Elementen, beim letzten Komma. Intl.ListFormat macht es richtig, in jeder Sprache, ganz ohne Bibliothek.
requestAnimationFrame – die Animationsschleife, die zum Bildschirm passt
setInterval(schritt, 16) läuft auf einem 144-Hz-Monitor anders als auf einem alten Handy – und im Hintergrundtab einfach weiter. requestAnimationFrame löst beides, wenn man die verstrichene Zeit mitrechnet statt Bilder zu zählen.