javascript 中的 obj?.prop 语法是什么?

What is the obj?.prop syntax in javascript?

我在查看代码时遇到了这个:

{{abc?.xvy=== tyu?abc?.xz:abc?.xz}}

我无法理解这个表达的意思。我知道它是 Null-safe 属性 访问,但我对链接有点困惑。 非常感谢任何帮助

其名为 "optionals" 的新 ES 提案用于对象属性的安全检查读取。上面的表达式等同于:

(abc && abc.xvy) === (tyu) ? (abc && abc.xz) : (abc && abc.xz)

您可以在此处找到更多详细信息:https://github.com/davidyaha/ecmascript-optionals-proposal

它被称为空传播算子

我们可以将每个 ?. 运算符视为一个短路,其中“如果到此为止的表达式为 nullundefined,则整个表达式的计算结果为 undefined”。 我们还可以选择调用函数。

这看起来是 optional chaining 提案的一个示例,该提案仍在进行中(仅在第 1 阶段)。它实际上还没有在 vanilla JS 环境中实现。使用

obj?.prop

表示:如果 obj 未定义或为空,则表达式的计算结果为 undefined。但除此之外,它将计算为对象上的 prop 属性。这是

的语法糖
obj && obj.prop

(如果 obj 未定义或为空,单独使用 obj.prop 将抛出异常)

那么,你的

abc?.xvy=== tyu?abc?.xz:abc?.xz
如果嵌套值 abc?.xvy 等于嵌套值 abc?.xz -

将计算为 true,它将计算为true 如果至少一个嵌套值不存在,另一个是 undefined.

为便于阅读而留出空间:

abc?.xvy === tyu
? abc?.xz
: abc?.xz

如您所见,?: 表达式相同,因此此处不需要条件运算符。等效测试(假设引用 tyu 不抛出)将是

abc?.xvy === abc?.xz