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.