前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Optional Chaining 做数据防御

使用 Optional Chaining 做数据防御

作者头像
IMWeb前端团队
发布2019-12-03 16:20:53
4130
发布2019-12-03 16:20:53
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载

如果大家阅读过我之前写的一篇关于ES6解构的文章,那一定会了解到解构达到数据防御功能,那么本文要介绍的是另一种数据防御方式Optional Chaining(可选链)。

什么是Optional Chaining

Optional Chaining允许我们检查对象是否存在,然后才试图访问它的属性。其他编译语言也有类似的功能,如C#的 Null-conditional operator

为什么我们需要Optional Chaining

在访问对象或数组之前,您是否曾经检查过它的属性?如果你不检查,你可能会遇到以下问题:

代码语言:javascript
复制
if (a && a.b && a.b.length > 0) {
    console.log('666');
}

之所以执行这些检查,是因为 JavaScript的对象不需要事先声明结构或schema。因此,如果不判断他的父级是否为一个对象就开始访问其属性可能会遇到错误:

当b为undefined时就报错了。

Optional Chaining 可以解决什么问题呢?

如果使用 Optional Chaining ,代码竟然可以如此简洁:

代码语言:javascript
复制
if (a?.b?.length > 0) {
    console.log('666');
}

怎么样? 告别了繁琐各种 & 和 各种层层检查,这又是一股清流。 但是,请记住可选的链接操作符是?.不是?这意味着当你访问数组其中一个元素时,应该这样:

代码语言:javascript
复制
const firstItem = a?.b?.[0]; // right
const firstItem = a?.b?[0]; // wrong

同样地,如果你要访问一个函数时,应该这样:

代码语言:javascript
复制
const execFunc = a?.func?.(); // right
const execFunc = a?.func?(); // wrong

更多玩法

除了数据防御,Optional Chaining 还可以使用在更多的场景中: 判断并执行函数

代码语言:javascript
复制
a?.();
// 等价于
a == null ? undefined : a();
// 等价于
a && a();

条件执行

代码语言:javascript
复制
a?.[++x];
// 等价于
a == null ? undefined : a[++x];
代码语言:javascript
复制
a?.b.c(++x).d;
// 等价于
a == null ? undefined : a.b.c(++x).d;

更加复杂的嵌套

代码语言:javascript
复制
a?.b[3].c?.(x).d
// 等价于
a == null ? undefined : a.b[3].c == null ? undefined : a.b[3].c(x).d;
// 注:嵌套一出来无论怎么写,感觉可读性不强了,所以,别炫技。

也可以分组,可读性更强

代码语言:javascript
复制
(a?.b).c;
// 等价于
(a == null ? undefined : a.b).c;

删除对象中的属性

代码语言:javascript
复制
delete a?.b
// 等价于
a == null ? undefined : delete a.b

Optional Chaining 是如何工作的?

?.先判断他的Left-Hand-Side 是否是nullundefined,如果是,那么此表达式短路并返回 undefined,否则,表达式依次类推执行到最后。

如何使用?

Optional Chaining目前在Stage 1阶段。 在使用之前,大家可以先到这里体验一波: codepan 虽然目前Optional Chaining 是草案,但可以通过 Babel 插件 babel-plugin-syntax-optional-chaining 来尝鲜。

参考资料

proposal-optional-chaining

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Optional Chaining
  • 为什么我们需要Optional Chaining
  • Optional Chaining 可以解决什么问题呢?
  • 更多玩法
  • Optional Chaining 是如何工作的?
  • 如何使用?
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档