携程篇|三个好用又令人期待的JavaScript新特性!

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!"

    推荐阅读