什么是obj的?在javascript .prop语法? [重复]

问题描述 投票:9回答:3

这个问题已经在这里有一个答案:

我一直在寻找通过代码,我碰到这个就来了:

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

我无法理解这种表达的意义。我知道这是空安全特性的访问,但我对链接有点混乱。任何帮助深表感谢

javascript ecmascript-5
3个回答
5
投票

它的新ES的提案名为“自选”的安全检查阅读对象的属性。上述表达式等价于:

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

你可以在这里找到更多的细节:https://github.com/davidyaha/ecmascript-optionals-proposal


8
投票

这看起来是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

4
投票

这就是所谓的空传输操作。

我们能想到的每一个?操作者,其中“如果表达式直到这一点为null或未定义,则整个表达式评估为未定义”的短路。我们也可以任意调用函数。

© www.soinside.com 2019 - 2024. All rights reserved.