JavaScript中的可选链
JavaScript中的可选链
这个问题已经有答案了:
我最近一直在Swift中编程。今天我在JavaScript中做了一些工作,然后有一个问题出现在我面前:
JavaScript中是否有类似于可选链接的东西?一种可以防止出现undefined is not an object
的方法,而无需任何变量?
实例:
function test(){ if(new Date() % 2){ return {value: function(){/*code*/}}; } } test().value();
因为有时候test
返回undefined,所以这将有一半的时间失败。
我唯一能想到的解决方案是使用一个函数:
function oc(object, key){ if(object){ return object[key](); } } oc(test(), 'value');
我想要能够像下面这样做:
test()?.value()
问号后面的部分只有在test
返回一个对象时才会执行。
但这并不是非常优雅。有更好的方法吗?一些运算符的神奇组合?
编辑 我知道我可以重写test
来返回一些东西。但我想知道是否有像是可选链接的东西。我对上面示例的特定解决方案并不感兴趣。如果无法控制返回undefined的函数,我也可以使用该方法。
admin 更改状态以发布 2023年5月24日
这是一个目前处于阶段4的提案,你可以在这里检查它的进展:
https://github.com/tc39/proposal-optional-chaining
你可以今天就使用babel插件:
https://www.npmjs.com/package/babel-plugin-transform-optional-chaining
2020年1月11日更新:
Babel现在默认支持可选链接
https://babeljs.io/blog/2020/01/11/7.8.0
可选链接运算符的拼写方式为?.
。它可以出现在三个位置:
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
(为了向后兼容),在词法语法的级别上添加了一个简单的前瞻,以便在该情况下不将字符序列?.
解释为单个标记(?.
标记不能紧接着小数数字)。
还值得一看: