Due operatori moderni eliminano intere righe di controlli difensivi.
const user = { profilo: { social: null } };
// optional chaining: si ferma a undefined invece di crashare
user?.profilo?.social?.twitter; // undefined (niente errore)
// nullish coalescing: default SOLO se null o undefined
const conteggio = user.visite ?? 0; // 0 se null/undefined
const nome = user.nome ?? "Anonimo";
?. (optional chaining) interrompe la catena appena trova null/undefined, restituendo undefined invece di lanciare "Cannot read properties of null". Perfetto per dati annidati e incerti (risposte di API, oggetti opzionali).
?? (nullish coalescing) somiglia a ||, ma con una differenza cruciale: || scatta anche su 0, "" e false, mentre ?? scatta solo su null/undefined. Quindi 0 ?? 5 è 0, mentre 0 || 5 è 5.
Insieme risolvono una montagna di if (x && x.y && x.y.z). Codice più corto e, soprattutto, meno crash a runtime.