• ES9 (2018)新特性


    ES9新特性(2018)

    • Promise.finally()
    • Rest/Spread 属性
    • 正则表达式命名捕获组(Regular Expression Named Capture Groups)
    • 正则表达式反向断言(lookbehind)
    • 正则表达式dotAll模式
    • 正则表达式 Unicode 转义
    • 非转义序列的模板字符串

    1.Promise.finally()

    一个Promise调用链要么成功到达最后一个.then(),要么失败触发.catch()。在某些情况下,你想要在无论Promise运行成功还是失败,运行相同的代码,例如清除,删除对话,关闭数据库连接等。

    .finally()允许你指定最终的逻辑:

    function doSomething() {
      doSomething1()
      .then(doSomething2)
      .then(doSomething3)
      .catch(err => {
        console.log(err);
      })
      .finally(() => {
        // finish here!
      });
    }

    2.Rest/Spread 属性

    ES2015引入了Rest参数和扩展运算符。三个点(...)仅用于数组。Rest参数语法允许我们将一个不定数量的参数表示为一个数组。

    restParam(1, 2, 3, 4, 5);
    
    function restParam(p1, p2, ...p3) {
      // p1 = 1
      // p2 = 2
      // p3 = [3, 4, 5]
    }
    展开操作符以相反的方式工作,将数组转换成可传递给函数的单独参数。例如Math.max()返回给定数字中的最大值:
    const values = [99, 100, -1, 48, 16];
    console.log( Math.max(...values) ); // 100
    ES2018为对象解构提供了和数组一样的Rest参数()和展开操作符,一个简单的例子:
    const myObject = {
      a: 1,
      b: 2,
      c: 3
    };
    
    const { a, ...x } = myObject;
    // a = 1
    // x = { b: 2, c: 3 }
    或者你可以使用它给函数传递参数:
    restParam({
      a: 1,
      b: 2,
      c: 3
    });
    
    function restParam({ a, ...x }) {
      // a = 1
      // x = { b: 2, c: 3 }
    }
    跟数组一样,Rest参数只能在声明的结尾处使用。此外,它只适用于每个对象的顶层,如果对象中嵌套对象则无法适用。

    扩展运算符可以在其他对象内使用,例如:

    const obj1 = { a: 1, b: 2, c: 3 };
    const obj2 = { ...obj1, z: 26 };
    // obj2 is { a: 1, b: 2, c: 3, z: 26 }
     

    可以使用扩展运算符拷贝一个对象,像是这样obj2 = {...obj1},但是 这只是一个对象的浅拷贝。另外,如果一个对象A的属性是对象B,那么在克隆后的对象cloneB中,该属性指向对象B。

    参考文章:https://juejin.im/post/5ca2e1935188254416288eb2

  • 相关阅读:
    方便操作的命名范围scope
    使用Emmet加速Web前端开发
    Beanstalkd一个高性能分布式内存队列系统
    2000年互联网泡沫
    简单有效的kmp算法
    文本比较算法:计算文本的相似度
    字符串的四则运算
    文本比较算法:Needleman/Wunsch算法
    两则面试题(动态规划)
    文本比较算法:编辑距离
  • 原文地址:https://www.cnblogs.com/embrace-ly/p/10940038.html
Copyright © 2020-2023  润新知