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谁快算谁的,不管成功或者失败,第一个结果就是最终结果。可以处理超时