我正在查看一个代码,发现了这个问题:
{{abc?.xvy=== tyu?abc?.xz:abc?.xz}}
我无法理解该表达的含义。我知道这是Null安全的属性访问,但是我对链接有点困惑。 任何帮助都非常感激
答案 0 :(得分:8)
这似乎是optional chaining提案的示例,该提案仍在进行中(仅在第一阶段)。它实际上尚未在原始JS环境中实现。使用
obj?.prop
表示:如果obj
未定义或为null,则表达式的计算结果为undefined
。但是否则,它将评估对象的prop
属性。这是语法糖
obj && obj.prop
(如果obj.prop
未定义或为空,则仅使用obj
会抛出
所以,您的
abc?.xvy=== tyu?abc?.xz:abc?.xz
如果嵌套值true
等于嵌套值abc?.xvy
-或,则的求值结果为abc?.xz
如果至少一个嵌套值不存在,而另一个为true
。
隔开以便于阅读:
undefined
如您所见,abc?.xvy === tyu
? abc?.xz
: abc?.xz
和?
表达式是相同的,因此这里不需要条件运算符。等效测试(假设引用:
不会抛出)
tyu
答案 1 :(得分:5)
其新的ES提案称为“可选”,用于安全检查对象属性。上面的表达式等效于:
(abc && abc.xvy) === (tyu) ? (abc && abc.xz) : (abc && abc.xz)
您可以在此处找到更多详细信息:https://github.com/davidyaha/ecmascript-optionals-proposal
答案 2 :(得分:4)
它称为空传播运算符。
我们可以认为每个?运算符都是短路,其中“ 如果到现在为止的表达式为 null 或 undefined ,则整个表达式的计算结果为 undefined ”。 我们还可以选择调用函数。