JS即将到来的新特性(2018+)

自从2015年ES2015发布以后,ECMAScript开始每年进行一次更新。下面是ES即将到来的特性,它们可能会在ES2019或ES2020中实现,相信你一定会喜欢的。

Optional Chaining(安全的链式操作)

在实际编程过程中,我们经常会遇到对象层层嵌套的情况。

const data = {
  article: {
    user: {
      email: '[email protected]',
    } 
  }
}

但是我们实际工作中,经常遇到数据不完整的情况。如果你直接写出data.article.user.email这样的代码,那么一旦出现

{
  article: {
    user: {
    } 
  }
}

这样的数据,你的代码就崩溃

Uncaught TypeError: Cannot read property 'email' of undefined

为了提高代码的稳定系,你可能写出
这样的代码

const email = data && data.article && data.article.user && data.article.user.email
console.log(email)

我之前就是这样做的,但是这样太丑陋了。。
新的提案引入了?.运算符

console.log( data.article?.user?.email)

如果之前的数据不是对象类型,就不会触发后续的操作。

怎么样,是不是一个能提高代码可读性的特性?

Nullish coalescing(空值合并)

我们经常要对一个数据进行空值检测,比如说

var a =  value || 'default value'

如果value不为空,就把它的值赋给a,否者给a一个默认值。
上述的代码的问题在于|| 运算符把 null undefined '' 0 false 都看作空值。实际上很多时候后面三者是有意义的值,为了避免这种情况,我们要额外做很多判断。新的??运算符简化了这点,它只会把 null undefined 看做空值

var a = false ??  'default value'
console.log(a) // false
a =  false ||  'default value'
console.log(a) // 'default value'

Pipeline operator (管道运算符)

看这样的代码

function doubleSay (str) {
  return str + ", " + str;
}
function capitalize (str) {
  return str[0].toUpperCase() + str.substring(1);
}
function exclaim (str) {
  return str + '!';
}
let result = exclaim(capitalize(doubleSay("hello")));
result //  "Hello, hello!"

我们经常遇到:把一个函数的返回值作为另一个函数的参数,如果函数嵌套的比较多,上面的代码可读性就会很差,新的提案引入了管道的概念。
对 Linux命令行熟悉的同学,肯定不会对管道陌生。管道运算符就是把前一个函数的返回值当做后一个函数的参数。

let result = "hello"
  |> doubleSay
  |> capitalize
  |> exclaim;

result // "Hello, hello!"

怎么样,这样是不是让代码非常易读?和Linux的管道符一模一样。

你可能感兴趣的:(JS即将到来的新特性(2018+))