可选链操作符(?.)的短路特性指当链中任一环节为 null 或 undefined 时,立即停止后续求值并返回 undefined;它从左到右逐级判断,首个空值处即终止,不执行右侧属性访问、方法调用或副作用,且不捕获非空值错误。

可选链操作符(?.)的短路特性,是指当访问链中某个环节为 null 或 undefined 时,**立即停止后续求值,并整体返回 undefined**,不会继续执行右边的属性访问、方法调用或括号表达式。
短路发生在“第一个空值处”
可选链从左到右逐级求值。一旦某一步的结果是 null 或 undefined,整个链立刻终止,不再计算之后的部分。
-
obj?.a?.b?.c:如果obj是null,则a、b、c都不会被访问 -
obj?.method()?.prop:如果obj.method()返回undefined,那么.prop不会被读取,也不会报错 -
arr?.[index]?.toString():若arr为undefined,索引访问和toString调用均跳过
不会触发副作用
因为短路会跳过后续表达式,所以那些本该发生的副作用(如函数调用、getter 执行、赋值等)**根本不会发生**。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
obj?.getVal()?.log():若obj.getVal()返回undefined,.log()不会被调用,里面的 console 输出或状态修改都不会执行 -
user?.profile?.name ?? '匿名':如果user.profile是undefined,.name不会被读取,也就不会触发name的 getter
与逻辑运算符 && 的区别
?. 短路是“结构安全型”的,只关心当前层级是否可访问;而 && 是布尔逻辑短路,会强制转换操作数为布尔值。
立即学习“Java免费学习笔记(深入)”;
-
obj?.a && obj.a.b:先安全访问a,再用&&判断真假——但若a是0、''、false,整个表达式就短路了,即使a.b存在也拿不到 -
obj?.a?.b:只要obj和a都存在(哪怕a === 0),就会继续访问b
注意:短路不等于“抛错拦截”
可选链只防止 TypeError: Cannot read property 'x' of null/undefined 这类错误,但它**不会捕获其他运行时错误**:
-
obj?.a().b:如果a()执行时抛出异常(比如内部 throw),短路机制不生效,错误照常冒泡 -
arr?.[someFunc()]:若someFunc()报错,可选链还没开始判断数组是否存在,就已经中断了

















