?. 是 ES2020 新增的一个特性,英文名叫 Optional Chaining 翻译为中文一般读 “可选链” 。

它并不是 JS 特有,而是从其他语言借鉴的,如下图,其中 Swift 和 Kotlin 是支持写的,也就是 a?.b = c
image.png

那为什么 JS 不支持可写呢?可以看下面的讨论 Should we include “optional property assignment” a?.b = c
概括一下:TC39 委员会也讨论过这个问题,投入产出比较低,当前版本不会支持,后面可能会实现。 “out of scope / maybe later”

image.png
image.png

临时解决方案
a?.b?.c?.d = m
可以先提取出倒数第二个元素为一个变量
let temp = a?.b?.c
temp && (temp.d = m)

参考:

tc39/proposal-optional-chaining