可选链操作符正确写法为array?.[index],?.[是整体语法单元;users?.[0]?.name可安全访问嵌套属性,配合??能提供兜底值,避免因数组为空、undefined或null导致报错。

可选链操作符(?.)后面接数组下标(如 ?.[0]),是安全读取数组元素的标准写法,专门用来避免因数组为空、未定义或首项为 null/undefined 导致的运行时错误。
怎么写才正确
核心写法是:array?.[index],其中 ?.[ 是一个整体语法单元,不能拆开或省略问号。
-
✅ 正确:
users?.[0]?.name—— 先确保users存在且非 null/undefined,再取第 0 项,再安全访问其name -
❌ 错误:
users?[0].name(语法错误,缺少点号)或users?.[0].name(若users[0]是null,仍会报错) -
✅ 推荐组合:
users?.[0]?.name ?? 'Anonymous'—— 用 ?? 提供兜底值,语义完整
常见安全场景示例
以下写法在现代浏览器和 Node.js 14+ 中均能稳定运行:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 空数组:
const arr = [];→arr?.[0]?.id返回undefined,不报错 - 数组为
undefined:let list;→list?.[0]?.value直接短路,返回undefined - 首项为
null:const data = [null, { id: 2 }];→data?.[0]?.id返回undefined(不是报错) - 深层嵌套:
response?.results?.[0]?.user?.profile?.avatar?.url—— 每一级都受保护
为什么不能只写 array[0]?.prop
这种写法看似简洁,但存在隐患:它只保护了 [0] 后面的部分,却没保护 array 本身。
立即学习“Java免费学习笔记(深入)”;
- 如果
array是undefined,array[0]就会触发Cannot read property '0' of undefined错误 - 而
array?.[0]?.prop从源头开始防护,真正实现“全链安全”
配合空值合并更实用
?. 只负责“不断链”,不提供默认值。业务中通常需要兜底:
-
config?.flags?.[0] ?? false—— 数组不存在、为空、或首项为undefined,都返回false -
items?.[currentIdx]?.title ?? 'No title'—— 动态索引也适用,前提是currentIdx已定义且非 null/undefined

















