1、Optional Chaining(可选链式调用) 当访问一个深层树形结构的对象时,我们总需要判断中间节点属性是否存在:
let person ={
name:'abc',
}
let address = person.info.address
// Uncaught TypeError: Cannot read property 'address' of undefined
这是我们现在 ES6 中会遇到的问题,原因是 person中没有 info对象。大部分时候我们的做法是判断取值或者引入第三方库像lodash等:
if(person && person.info){
let address = person.info.address
}
或
_.get(person,'info.address')
而 Optional chaining (可选链式调用)可以解决为了容错而写过多重复代码的问题,新特性可以这样写:
let address = person?.info?.address ?? 'test'// address:'test'
【携程篇|三个好用又令人期待的JavaScript新特性!】原理:操作符检查 ?. 会检查操作符左边的值是否为 null 或 undefined。如果是,这个表达式就终止然后返回 undefined。否则,这个表达式继续执行检查通过。
另外配合stage2中的另一新特性 Nullish coalescing operator(??运算符),我们可以很方便的处理类似取值默认值的情况。
目前, Optional chaining (可选链式调用)在2019.6.5已经进入了草案 stage2阶段,相信很快就会大规模使用了。想要在自己项目中提前使用新特性的小伙伴,可以使用babel的插件babel-plugin-proposal-optional-chaining。
Optional Chaining 的语法有三种使用场景:
obj?.prop// optional static property access
obj?.[expr]// optional dynamic property access
func?.(...args) // optional function or method call
2、Nullish coalescing(空值合并) 我们判断控制时一般这样写:
value != null && value != undefined ? value : 'default value'
或是这样:
value || 'default value'
_.isEmpty(value) ? 'default value' : value
第一种方法的代码显得有些冗长不够简洁,第二种和第三种方法会将0,false和’ ’ 都视为false,有的时候我们需要这样,但也有的时候我们并不需要这样,新提案的**Nullish coalescing(空值合并)**特性则可以帮我们达到第一种代码的效果,代码又非常的简洁:
value ?? 'default value' //只有value为null或者undefined时,才赋默认值'default value'
3、Pipeline operator(管道运算符) 举个例子,通过三个函数对字符串进行处理,通常是这样:
function a(str) {return str + ", " + str;
}function b(str) {
return str[0].toUpperCase() + str.substring(1);
}function c(str) {
return str + '!';
}let result = c ( b ( a("hello") ) );
// "Hello, hello!"
通过 管道运算符,我们可以这样写:
let result = "hello" |> a |> b |> c // "Hello, hello!"
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- 接口|axios接口报错-参数类型错误解决
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export