You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 预处理后端错误码constinterceptors=(res)=>{constcode=res.data.codeif(code===100){// 未登录console.log('请先登录')// or redirect to login_error_urlreturnPromise.reject('LoginError')}elseif(code===101){// 缺失访问/修改/删除权限console.log('没有访问权限')// or redirect to permission_error_urlreturnPromise.reject('PermissionError')}else{// 正常将数据返回returnresponse.data}}
本文是一篇应用型文章,根据实际的项目场景总结ES6的各种使用姿势。文章不会对ES6语法中的特性或原理做过多的说明,重点从实际的应用场景去理解ES6的新语法、新特性。
一、变量声明
为解决(或规范)JS中块级作用域的问题,ES6新增了
let
和const
两种声明变量的方式,与var
的区别在于:var
声明的变量,作用域会提升,变量可被重赋值;let
和const
声明的变量存在块级作用域和暂时性死区,但不会变量提升;let
声明的变量可被重赋值,const
不行。日常我们项目开发中,会在IDE保存文件或提交Git时会借助
Eslint
之类的工具对代码规范进行校验,其中一条常见的校验提示是:声明的变量xxx没有被再赋值,建议使用const
。因此,一般我们用ES6声明变量时,可以遵循下面的原则:
let
命令;const
命令;var
命令。二、解构赋值
解构赋值是从字符串、数组或对象中提取值,对变量进行赋值的过程。可以应用在变量定义、函数参数等场景中。
三、数据结构Set和Map
Set
数据结构要求其元素不可重复,这种唯一性特性在项目开发中能带来很大便利;Map
数据结构是一种键值对集合,它对键的数据类型提供了更广泛的支持,同时有一系列极好用的API。这里我们以数据列表为场景:对销售订单进行对账,要求限制只能对同一产品进行对账。
1. Set的不重复性
2. Map的数据存储
四、模板字符串
ES6的模板字符串允许我们在字符串中嵌入变量,或者定义一个多行字符串,有更好的可读性。
五、基础函数
1. 箭头函数
箭头函数,让你的表达更简洁。它有以下几个特点:
this
,是箭头函数定义时所在上下文的this
,这点不可变。但可以通过bind
、call
、apply
方法改变上下文的this
指向;new
命令;arguments
对象,但可以使用rest
参数代替;yield
命令,因此箭头函数不能用作Generator
函数。2. 默认参数
3. rest参数
4. 参数解构
六、条件判断
中后台系统中权限管理是必备的功能,从控制页面的访问权限到某个功能的操作权限。这里以权限管理为应用场景,看如何用ES6优雅地进行条件判断。
1. 路由权限控制
2. 系统功能权限控制(比如对账操作)
七、改写for循环
假定我们有一个订单数据列表:
1. Map取出数据
2. forEach改变源数据
3. 如何continue
如果购买顾客是杨过和小龙女,将其标识为一对CP(换句话说,循环列表过程,遇到郭襄就执行
continue
命令):4. 如何break
商家搞优惠活动,按序给每个订单总价核减5元(核减的5元返还给顾客),直到遇到第一个奇数总价的订单(换句话说,虚幻列表过程,遇到第一个奇数总价就执行
break
命令,终止循环)。八、对象与数组互转
假定场景:给每个订单的对账情况加上状态样式(
success
、warning
、danger
),有如下数据:实现功能:将样式映射表转化为状态映射表,形如:
使用ES6的
entries
和reduce
等API实现:九、数据采集
有时候我们需要在一个数据对象中取出部分的数据项,经过一定的组装再传递给某个组件或发送到服务器。
假定场景:对一个对账单进行修改,有一个
form
变量存储表单数据,router
上还带有一些参数queryData
。实现将修改的数据重新组装后发给服务器,但存在部分数据不需要发送。1. Object.assign提取数据
2. filter过滤数据
3. 扩展运算符组合数据
十、异步函数
ES6提供了
Promise
对象和async
函数用于处理异步操作,用于http
请求的axios
库就是基于Promise
实现的。利用Promise
的特性,我们可以对http
请求的返回内容进行拦截而不让开发者有任何感知。应用场景:中后台系统的接口一般会有严格的权限要求以及我们需要对接口异常进行捕获。通过拦截封装,可以在业务层代码拿到数据之前,先做一层验证。
1. 基于Promise再封装post
2. interceptors拦截器
3. 异常捕获函数reject
效果如下:
4. Asyn函数让异步代码更优雅、简洁
十一、动态加载(import)
系统中可能存在某种功能(比如打印)需要引入第三方库(
html2canvas.js
,print.js
等),但有时候某些第三方库可能体量惊人,而用户访问页面又不一定会触发该功能,这时候就可以考虑动态引入。import()
返回一个Promise
对象,只在运行时加载指定模块。另外一个常见的应用场景是:Vue
的路由懒加载。十二、多维度组合排序
假定场景:在一个商品列表页面,存在两个可排序的列:单价(
price
)和款式(style
)。如果先点击了按单价排序,再点击按款式排序,要求款式基于单价的排序上再排序。排序结果如下:先按价格升序,再按款式升序
结语
以上仅是个人在日常开发中的ES6使用总结,并未包含全部ES6特性,尚有许多特性较少应用,欢迎大家一起交流,补充分享你们实际项目中应用ES6的情形。
最后,如果您觉得本文对您有所启发,请勿吝啬您的点赞哈哈~
The text was updated successfully, but these errors were encountered: