ITADN
tc39/proposal-optional-chaining-assignment
tc39/proposal-optional-chaining-assignment · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

可选链式赋值

关于在赋值运算符左侧添加可选链式支持的建议:a?.b = c

当前状态

  • 提倡者:Nicolò Ribaudo
  • 阶段:1
  • 幻灯片:

设计动机

通常情况下,你需要为对象的某个属性赋值,但前提是该对象确实存在。

标准的做法是使用if语句来保护赋值操作:

if (obj) obj.prop = value;

该语言提供了一种方式来_读取_对象的属性,但仅限于对象确实存在时(obj?.prop = value),而开发者必须记住,在赋值操作时并不支持相同的语法。

使用场景

有关此功能在 Babel 和 TypeScript 代码库中可发挥作用的示例,请参见此 gist]。

你可以通过搜索if \((.*?)\)[\s\n]*\{?[\s\n]*\1\.来查找自己在项目中可能使用可选链式赋值的场景。该正则表达式可能会存在误报和漏报的情况,但可以作为一个潜在的起点。

描述

本建议引入了以下语法:

新语法对应的 ES2023 语法
expr1?.prop = valexpr1 == null ? undefined : expr1.prop = val
expr1?.prop += valexpr1 == null ? undefined : expr1.prop += val
expr1?.prop ??= valexpr1 == null ? undefined : expr1.prop ??= val
expr1?.[key] = valexpr1 == null ? undefined : expr1[key] = val
expr1?.foo().prop[key] = valexpr1 == null ? undefined : expr1.foo().prop[key] = val

实现情况