空值合并操作符(??)仅在左侧为null或undefined时取右侧默认值,比||更精准;||会将0、''、false等假值误判为无效而覆盖正确数据。

用空值合并操作符(??)可以安全地处理 API 返回的 null 或 undefined,它只在左侧值为 null 或 undefined 时才取右侧默认值,比逻辑或 || 更精准。
为什么不用 ||?
|| 是“假值合并”,会把 0、''(空字符串)、false 也当成“无效”而替换掉,默认值可能被意外覆盖。比如:
API 返回 { count: 0 },用 data.count || 10 会得到 10 —— 明显错误。
而 ?? 只关心是否为 null 或 undefined,0 ?? 10 结果仍是 0。
立即学习“Java免费学习笔记(深入)”;
常见 API 空数据场景及写法
- 字段可能缺失:
user.name ?? '匿名用户' - 嵌套属性防报错(配合可选链):
response?.data?.items?.[0]?.title ?? '暂无标题' - 数组为空或未返回:
(response?.data?.list ?? []).length - 数值型字段容错:
product.price ?? 99.9(null→99.9,0保持不变)
和可选链(?. )搭配最实用
API 响应结构不稳定时,单独用 ?? 不够——比如 res.data.user.name 中任意一级为 null 都会报错。必须先用 ?. 安全访问,再用 ?? 提供兜底:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const avatar = res?.data?.user?.avatarUrl ?? '/default-avatar.png';
这样即使 res、data、user 或 avatarUrl 任一环节是 null/undefined,都不会报错,最终得到默认头像路径。
后端返回空字符串也要处理?
?? 对空字符串 '' 不生效,因为它不是 null 或 undefined。如果业务上认为 '' 也代表“无数据”,需手动判断:
const title = response?.data?.title ?? ''; // 先保不报错const displayTitle = title.trim() === '' ? '未命名' : title;
或者封装成小函数复用:coalesceString(str, fallback) { return str?.trim() ? str : fallback; }

















