可选链和空值合并为什么不能简单替换为 && 和 ||?
参考答案
空值合并只在左侧为 null 或 undefined 时使用右侧值;逻辑或则会把 0、false、空字符串等假值也视为需要回退。是否保留这些值取决于业务语义。
JavaScript
console.log(0 ?? 10); // 输出:0
console.log(0 || 10); // 输出:10
const user = null;
console.log(user?.profile?.name ?? '匿名'); // 输出:匿名
可选链在链路遇到 null 或 undefined 时短路,不是捕获任意错误。访问未声明变量仍可能抛错,属性存在但不是函数时,可选调用也不保证成功;括号分组可能结束连续短路链。它适合表达数据确实可缺失的情况,不应掩盖本来必须存在的业务字段。
补充参考:可选链。