加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

为什么我喜欢 JavaScript 可选链

发布时间:2019-10-25 15:05:00 所属栏目:优化 来源:疯狂的技术宅
导读:很多 JavaScript 的特性极大地改变了你的编码方式。从 ES2015 及更高版本开始,对我的代码影响较大的功能是解构、箭头函数、类和模块系统。 截至2019年8月,一项新提案可选链(optional chaining)进入了第3阶段,将是一个很好的改进。可选的链接更改了从深

相反,使用 ?. 访问电影标题 movie?.title 没有任何意义。电影对象不会是空的。

  1. // Good 
  2. function logMovie(movie) { 
  3.   console.log(movie.director?.name); 
  4.   console.log(movie.title); 
  5.  
  6. // Bad 
  7. function logMovie(movie) { 
  8.   // director needs optional chaining 
  9.   console.log(movie.director.name); 
  10.  
  11.   // movie doesn't need optional chaining 
  12.   console.log(movie?.title); 

6.2 通常有更好的选择

以下函数 hasPadding() 接受具有可选 padding 属性的样式对象。 padding 具有可选的属性 left,top,right,bottom。

尝试用可选链运算符:

  1. function hasPadding({ padding }) { 
  2.   const top = padding?.top ?? 0; 
  3.   const right = padding?.right ?? 0; 
  4.   const bottom = padding?.bottom ?? 0; 
  5.   const left = padding?.left ?? 0; 
  6.   return left + top + right + bottom !== 0; 
  7.  
  8. hasPadding({ color: 'black' });        // => false 
  9. hasPadding({ padding: { left: 0 } });  // => false 
  10. hasPadding({ padding: { right: 10 }}); // => true 

虽然函数可以正确地确定元素是否具有填充,但是为每个属性使用可选链是毫无必要的。

更好的方法是使用对象散布运算符将填充对象默认为零值:

  1. function hasPadding({ padding }) { 
  2.   const p = { 
  3.     top: 0, 
  4.     right: 0, 
  5.     bottom: 0, 
  6.     left: 0, 
  7.     ...padding 
  8.   }; 
  9.   return p.top + p.left + p.right + p.bottom !== 0; 
  10.  
  11. hasPadding({ color: 'black' });        // => false 
  12. hasPadding({ padding: { left: 0 } });  // => false 
  13. hasPadding({ padding: { right: 10 }}); // => true 

我认为这一版本的 hasPadding() 可读性更好。

7. 我为什么喜欢它?

我喜欢可选链运算符,因为它允许轻松地从嵌套对象中访问属性。它可以防止编写针对访问者链中每个属性访问器上的空值进行验证的样板代码。

当可选链与空值合并运算符结合使用时,可以得到更好的结果,从而更轻松地处理默认值。

(编辑:鹰潭站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读