Apu*_*hak 9 javascript ecmascript-5
我正在查看代码,我遇到了这个:
{{abc?.xvy=== tyu?abc?.xz:abc?.xz}}
Run Code Online (Sandbox Code Playgroud)
我无法理解这个表达的含义.我知道这是一个安全的属性访问,但我对链接有点困惑.任何帮助深表感谢
这看起来是可选链接提议的一个示例,它仍然是一项正在进行的工作(仅在第1阶段).它实际上并没有在vanilla JS环境中实现.运用
obj?.prop
Run Code Online (Sandbox Code Playgroud)
表示:如果obj未定义或为null,则表达式求值为undefined.但否则,它将评估prop对象上的属性.这是语法糖
obj && obj.prop
Run Code Online (Sandbox Code Playgroud)
(obj.prop如果obj未定义或为null,则单独使用将抛出)
所以,你的
abc?.xvy=== tyu?abc?.xz:abc?.xz
Run Code Online (Sandbox Code Playgroud)
将评估true嵌套值abc?.xvy是否等于嵌套值abc?.xz- 或者,true如果至少有一个嵌套值不存在,它将评估为另一个嵌套值undefined.
间隔更方便阅读:
abc?.xvy === tyu
? abc?.xz
: abc?.xz
Run Code Online (Sandbox Code Playgroud)
如您所见,两者?和:表达式是相同的,这使得条件运算符不必要.等效测试(假设引用tyu不抛出)将是
abc?.xvy === abc?.xz
Run Code Online (Sandbox Code Playgroud)
它的新ES提议称为“可选”,用于安全检查对象属性。上面的表达式等效于:
(abc && abc.xvy) === (tyu) ? (abc && abc.xz) : (abc && abc.xz)
Run Code Online (Sandbox Code Playgroud)
您可以在这里找到更多详细信息:https : //github.com/davidyaha/ecmascript-optionals-proposal
它被称为Null Propagation Operator。
我们可以想到每个?。运算符作为短路,其中“如果直到这一点的表达式为空或未定义,则整个表达式的计算结果为未定义”。我们还可以选择调用函数。
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |