Hint
?? vs ||: ?? only replaces null/undefined. || replaces any falsy (0, "", false). Use ?? when 0 or "" are valid values you want to keep.
const data = {
user: {
name: 'Alice',
score: 0,
address: null
}
};
console.log(data.user?.name);
console.log(data.user?.email ?? 'no email');
console.log(data.user?.score ?? 100);
console.log(data.user?.score || 100);
console.log(data.user?.address?.city ?? 'no city');
console.log(data.org?.name ?? 'no org');Alice no email 0 100 no city no org
Explanation: user.name = "Alice". email is undefined β ?? "no email". score is 0 β ?? only replaces null/undefined, so 0 stays. score || 100 β 0 is falsy β 100. address is null β optional chain short-circuits β ?? "no city". data.org is undefined β short-circuit β "no org".
Key Insight: ?? vs ||: ?? only replaces null/undefined. || replaces any falsy (0, "", false). Use ?? when 0 or "" are valid values you want to keep.