JavaScript中对象展开undefined的行为是否属标准定义?
对象展开
...undefined的行为定义 这个行为是ECMAScript标准明确定义的,不属于未定义行为(UB)。
根据ECMAScript规范,对象展开语法处理右侧表达式时,会执行以下逻辑:
- 先对右侧表达式求值,得到对应的值
- 如果该值是
null或undefined,则将其视为空对象进行展开操作 - 展开空对象不会向目标对象添加任何属性,也不会抛出错误
结合你的示例代码:
const x = my?.property?.that?.does?.not?.exist // undefined const y = { foo: 42, ...x }
当x为undefined时,...x的展开操作不会给y添加任何额外属性,最终y的值就是{ foo: 42 },这个结果完全符合标准的预期设计。
这种处理方式是规范有意设计的,目的是让对象展开语法在处理可能为null/undefined的变量时更健壮,无需额外添加空值判断即可安全使用。
内容的提问来源于stack exchange,提问作者mzedeler
相关产品推荐
相关产品推荐

