We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Learn more about funding links in repositories.
Report abuse
There was an error while loading. Please reload this page.
第274天 你知道js的可选链是什么吗?说说你对它的理解,它有什么应用场景?
我也要出题
可选链是ES2020新引入的功能,目前处于ECMAScript Proposal Stage 4阶段,将陆续登陆各大浏览器(目前可通过勾选chrome的Experimental JavaScript功能体验该功能)。
本人在其Stage 2阶段开始关注,算是最期待的一个新功能之一。
语法如下:
window?.console?.log?.("Hello");
该代码可解读为
如果window存在,则其取console属性,如果console存在,则取其log属性,如果log存在,则将其作为方法调用。 如果该链任意一环节不存在,则忽略整个链并返回undefined。
window
console
log
undefined
在ES2020以前若要实现类似逻辑,可以使用以下方式:
window && window.console && window.console.log && window.console.log("Hello");
该功能在获取一个多层嵌套对象的属性,并且上层对象可能不存在时非常有用,比如 user.data?.extraData?.phone,如果data、extraData有可能不存在,我们不需要判断其是否存在就可以取其phone值,会减少很多逻辑判断和冗余代码。
user.data?.extraData?.phone
data
extraData
phone
个人觉得该功能会影响代码的规范性,造成代码的可读性变差,建议只在处理网络传输数据时使用。
在各类库里有看到类似的函数,getObjectValue(obj, 'a.b.c') 这样的, 能找到就返回,找不到至少不报错会返回 undefined。 但理论上,这种报错最好还是暴露出来比较好些。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/%E5%8F%AF%E9%80%89%E9%93%BE
obj?.role?.age === obj && obj.role && obj.role.age ,极大的简化了代码。 可选链操作符 ( ?. ) 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。
Activity
wheatup commentedon Jan 15, 2020
可选链是ES2020新引入的功能,目前处于ECMAScript Proposal Stage 4阶段,将陆续登陆各大浏览器(目前可通过勾选chrome的Experimental JavaScript功能体验该功能)。
本人在其Stage 2阶段开始关注,算是最期待的一个新功能之一。
语法如下:
该代码可解读为
在ES2020以前若要实现类似逻辑,可以使用以下方式:
该功能在获取一个多层嵌套对象的属性,并且上层对象可能不存在时非常有用,比如
user.data?.extraData?.phone
,如果data
、extraData
有可能不存在,我们不需要判断其是否存在就可以取其phone
值,会减少很多逻辑判断和冗余代码。个人觉得该功能会影响代码的规范性,造成代码的可读性变差,建议只在处理网络传输数据时使用。
forever-z-133 commentedon Jan 15, 2020
在各类库里有看到类似的函数,getObjectValue(obj, 'a.b.c') 这样的,
能找到就返回,找不到至少不报错会返回 undefined。
但理论上,这种报错最好还是暴露出来比较好些。
azzyx commentedon Nov 12, 2020
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/%E5%8F%AF%E9%80%89%E9%93%BE
xiaoqiangz commentedon Aug 29, 2022
obj?.role?.age === obj && obj.role && obj.role.age ,极大的简化了代码。
可选链操作符 ( ?. ) 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。
azzyx commentedon Aug 29, 2022