当前位置 博文首页 > JadePeng:ES 2021 来了,详细解读5个新特性,附案例

    JadePeng:ES 2021 来了,详细解读5个新特性,附案例

    作者:JadePeng 时间:2021-01-29 19:32

    ES 2021是世界上最受欢迎的编程语言的最新版本?本次迭代中包含了五个新特性,让我们来一睹为快。

    ES 2021是世界上最受欢迎的编程语言的最新版本?

    本次迭代中包含了五个新特性,让我们来一睹为快。

    1.全部替换replaceAll

    js默认的replace 方法仅替换字符串中一个模式的第一个实例,要全局替换,你需要自己写正则,因此2021带来了全新的replaceAll方法。

    'Hello'.replaceAll('l', 'L') // 'HeLLo'
    
    

    2。 Promise.any

    这是Promise全局对象的静态方法,可以放Promise 数组,只要有一个Promise完成解析,就短路返回一个值。如果所有的 promise 都被拒绝,那么它将抛出一个汇总错误消息)。

    示例:短路返回

    Promise.any([
      new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')),
      new Promise((resolve, reject) => setTimeout(resolve, 1000, 'Second')),
      new Promise((resolve, reject) => setTimeout(resolve, 2000, 'First')),
    ])
    .then(value => console.log(`Result: ${value}`))
    .catch (err => console.log(err))
    
    /**** Output ****/
    // Result: Second
    
    
    

    示例:错误处理

    Promise.any([
      new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')),
      new Promise((resolve, reject) => setTimeout(resolve, 1000, 'Second')),
      new Promise((resolve, reject) => setTimeout(resolve, 2000, 'First')),
    ])
    .then(value => console.log(`Result: ${value}`))
    .catch (err => console.log(err))
    
    /**** Output ****/
    // Result: Second
    

    如果您使用过Promise.all,则在何时解决和何时拒绝方面基本上是相反的。

    3  WeakRef弱引用

    这是一个新类,用于创建对对象的弱引用,即不会阻止被引用对象被垃圾收集的引用,Java中有类似的实现。

    let obj = { name: "Andy" }
    const myRef = new WeakRef(obj)
    
    

    然后,您可以像这样获取包装的对象:

    myRef.deref() // { name: "Andy" }
    
    

    如果垃圾收集器已经将其从内存中删除,它将返回undefined

    4.逻辑运算符与赋值表达式

    在 JavaScript 中有许多赋值运算符和逻辑运算符,例如:

    // Assignment Operator Example
    let num = 5
    num+=10
    console.log(num) // 15
    // Logical Operator Example
    let num1 = 6
    let num2 = 3
    console.log(num1 === 6 && num2 === 2) // false
    console.log(num1 === 6 || num2 === 2) // true
    
    

    ES2021 让我们将能把逻辑运算符和赋值运算符结合起来。

    他们看起来像这样:

    a ||= b
    a &&= b
    a ??= b
    
    

    这里解释下第一个的工作原理,你基本上可以猜出其他两个的工作原理。

    a ||= b
    
    // 等价于
    
    // 1. a || (a = b)
    // 2. if (!a) a = b
    
    

    类似的a &&= b等价于if(a) { a = b; }

    num1 ??= num2等价于num1 ?? (num1 = num2)

    5.数值分隔符

    新引入的数值分隔符使用 _(下划线)字符,在数值组之间提供分隔,使数值读起来更容易。

    看这个:

    let num = 1000000000
    
    

    是十亿还是一亿?

    现在在ES 2021中,您可以改为编写以下代码:

    let num = 1_000_000_000
    
    

    现在,这看起来像十亿。


    感谢您的认真阅读。

    如果你觉得有帮助,欢迎点赞支持!

    不定期分享软件开发经验,欢迎关注,一起交流软件开发

    下一篇:没有了