这个问题已经在这里有一个答案:
我一直在寻找通过代码,我碰到这个就来了:
{{abc?.xvy=== tyu?abc?.xz:abc?.xz}}
我无法理解这种表达的意义。我知道这是空安全特性的访问,但我对链接有点混乱。任何帮助深表感谢
它的新ES的提案名为“自选”的安全检查阅读对象的属性。上述表达式等价于:
(abc && abc.xvy) === (tyu) ? (abc && abc.xz) : (abc && abc.xz)
你可以在这里找到更多的细节:https://github.com/davidyaha/ecmascript-optionals-proposal
这看起来是optional chaining建议,这在很大程度上仍然在进行中(仅在第1阶段)工作的一个例子。它实际上并没有香草JS环境中实现呢。运用
obj?.prop
的意思是:如果obj
未定义或空,则表达式的计算结果为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
不抛出)会
abc?.xvy === abc?.xz
这就是所谓的空传输操作。
我们能想到的每一个?操作者,其中“如果表达式直到这一点为null或未定义,则整个表达式评估为未定义”的短路。我们也可以任意调用函数。