es2021 新特性

1. string的新方法replaceAll

很舒服,替换字符串中指定字符为新的字符,简单的全局替换不强依赖正则了

'大海星辰,星辰大海'.replaceAll('星辰','满眼星辰')
// "大海满眼星辰,满眼星辰大海"

2. 数值分割符

网爆某女明星片酬1.6亿元,如果用数值表达就是160000000元,贫穷限制了0的的认知,数的好心累,es2021为了大家方便,添加了下面的写法,以下划线(_)任意个数分割

1_6000_0000
// 160000000
160_000_000
// 160000000

3.新的内置对象WeakRef

WeakRef对象允许您保留对另一个对象的弱引用,而不会阻止被弱引用对象被GC回收
尽量别用
正确使用WeakRef对象需要仔细的考虑,最好尽量避免使用。避免依赖于规范没有保证的任何特定行为也是十分重要的。何时、如何以及是否发生垃圾回收取决于任何给定JavaScript引擎的实现。GC在一个JavaScript引擎中的行为有可能在另一个JavaScript引擎中的行为大相径庭,或者甚至在同一类引擎,不同版本中GC的行为都有可能有较大的差距。GC目前还是JavaScript引擎实现者不断改进和改进解决方案的一个难题。

let obj={name:"tom",age:10,sex:'男',son:{name:"jarray",age:8,sex:"男",son:{name:"susan",age:2,sex:"女"}}}
let ref=new WeakRef(obj)
// 原型上deref方法,返回WeakRef的目标对象
ref.deref()
{name: "tom", age: 10, sex: "男", son: {…}}

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

let num = 5
num+=10
console.log(num) // 15

let a;
let b=100;
a||=b;  //a=a||b;   等价于:if(a== 0|| a === "" ||a=== false ||a === null ||a=== undefined){a=b}
a&&=b; // a=a&&b;  等价于: if(a) {a=b}
a??=b; //a=a??b ; 等价于:   if(a===null||a===undefined){a=b}

5.亮点 Promis.any

类似于Promise.all和Promise.race,又区别于他们
Promise.any,接收一个可迭代对象,当有一个promise 成功,就会返回那个已经成功的promise
如果可迭代对象中没有一个promise成功,才会返回一个失败的promise和AggregateError类型的实例,他是Error的一个子类,用于把单一的错误集合在一起。

    const addRemote = async (a, b) => new Promise((resolve,reject) => {
        setTimeout(() => reject(), 1000)
    })
    let promise1=addRemote(1,2)
    let promise2=addRemote(1,3)
    let promise3=addRemote(1,4)
    Promise.any([promise1,promise2,promise3]).then(res=>{
        console.log(res,'成功')
    }).catch(err=>{
        console.log(err,'失败')
    })
    // test.html:26 AggregateError: All promises were rejected "失败"

成功,不在乎先后,有一个成功的就行

    const addRemote = async (a, b) => new Promise((resolve, reject) => {
        setTimeout(() => resolve(a + b), 3000)
    })
    const addRemote2 = async (a, b) => new Promise((resolve, reject) => {
        setTimeout(() => reject(), 1000)
    })
    let promise1 = addRemote(1, 2)
    let promise2 = addRemote2(1, 3)
    let promise3 = addRemote2(1, 4)
    Promise.any([promise1, promise2, promise3]).then(res => {
        console.log(res, '成功')
    }).catch(err => {
        console.log(err, '失败')
    })

应用场景

  • 从最快的服务器检索资源
    来自世界各地的用户访问网站,如果有多个服务器,尽可能使用响应速度最快的服务器,在这种情况下使用Promise.any()方法体验最佳
    Promise.all 一个失败,就是失败,有成功也是失败
    Promise.any一个成功,就是成功,有失败也是成功
    Promise.race谁快算谁的,不管成功或者失败,第一个结果就是最终结果。可以处理超时

你可能感兴趣的:(es2021 新特性)