一尘不染

JavaScript中的可选链接

javascript

我最近在Swift中进行了大量编程。今天,当出现问题时,我在JavaScipt中做了一些工作:

是否有类似于JavaScript中的可选链接的内容?一种防止undefined is not an object没有任何变量的方法?

例:

function test(){
   if(new Date() % 2){
      return {value: function(){/*code*/}};
   }
}

test().value();

将失败一半的时间,因为有时test返回未定义。

我能想到的唯一解决方案是一个函数:

function oc(object, key){
   if(object){
      return object[key]();
   }
}

oc(test(), 'value');

我希望能够执行以下操作:

test()?.value()

仅在test返回对象后才执行问号后的部分。

但这不是很精巧。有更好的东西吗?运营商的神奇组合?

编辑 我知道我可以重写test以返回某些内容。但是我想知道是否有类似可选链接的东西。我对上述 示例
的特定解决方案不感兴趣。如果无法控制返回undefined的函数,我也可以使用某些东西。


阅读 612

收藏
2020-05-01

共1个答案

一尘不染

Optional Chaining运算符是拼写的?.。它可能出现在三个位置:

obj?.prop       // optional static property access
obj?.[expr]     // optional dynamic property access
func?.(...args) // optional function or method call

笔记:

为了允许foo?.3:0被解析为foo?.3:0(向后兼容所需),在词法语法级别添加了一个简单的超前功能,因此?.在这种情况下,字符序列不能解释为单个标记(?.标记不能后面紧跟一个十进制数字)。

2020-05-01