最推荐用可选链操作符(?.)安全访问嵌套属性,配合空值合并运算符(??)提供精准默认值;解构时设空对象默认值;兼容旧环境可用_.get或自定义safeget函数。

直接用可选链操作符(?.)是最简单、最推荐的方式。它能在任意中间层级为 null 或 undefined 时自动短路,返回 undefined 而不是报错。
用 ?. 安全访问嵌套路径
只要路径中某一层不存在,整个表达式就停止执行,不抛异常:
-
response?.data?.user?.profile?.avatarUrl→ 安全,任一环节为空都返回undefined -
response.data.user.profile.avatarUrl→ 危险,中间任一属性缺失立刻报TypeError
配合 ?? 提供默认值
?? 只在左侧是 null 或 undefined 时才生效,比 || 更精准(不会把 0、false、'' 当成“空”):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
user?.age ?? 18→ 没传age用 18;传了0就保留0 -
order?.items?.[0]?.name ?? '未知商品'→ 链式取值 + 精准兜底
解构时设默认空对象
从响应中批量取值时,给中间层级设空对象默认值,避免解构失败:
const { data = {}, user = {}, profile = {} } = response;- 进阶写法(一行拿到深层默认值):
const { data: { user: { profile: { avatarUrl = '' } = {} } = {} } = {} } = response;
兼容旧环境或复杂路径可封装工具函数
如果项目需支持低版本浏览器,或频繁访问类似 'result.list[0].meta.tags[2].name' 这类动态路径,可用轻量函数替代:
- Lodash 的
_.get(obj, 'a.b.c', 'default')是成熟选择 - 自定义简易版:
const safeGet = (obj, path, def) => path.split('.').reduce((o, k) => o?.[k], obj) ?? def;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










