Optional chaining obj?.prop trả về undefined thay vì throw TypeError nếu obj là null/undefined — ví dụ user?.address?.city an toàn kể cả khi user hoặc address là null.
Nullish coalescing a ?? b trả về b chỉ khi a là null/undefined, khác || vốn trả về b với mọi falsy (0, '', false). Kết hợp cả hai: user?.profile?.age ?? 18 để lấy tuổi hoặc default 18. Bẫy: 0 || 5 trả về 5 nhưng 0 ?? 5 trả về 0 — dùng ?? khi 0 hoặc chuỗi rỗng là giá trị hợp lệ.
Optional chaining obj?.prop returns undefined instead of throwing a TypeError if obj is null/undefined — for example user?.address?.city is safe even when user or address is null.
Nullish coalescing a ?? b returns b only when a is null/undefined, unlike || which returns b for any falsy value (0, '', false). Combined: user?.profile?.age ?? 18 to get age or default to 18. Trap: 0 || 5 returns 5 but 0 ?? 5 returns 0 — use ?? when 0 or empty string are valid values.