前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >es2021 新特性

es2021 新特性

作者头像
刘嘿哈
发布2022-10-25 14:20:50
1990
发布2022-10-25 14:20:50
举报
文章被收录于专栏:js笔记js笔记

1. string的新方法replaceAll

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

代码语言:javascript
复制
'大海星辰,星辰大海'.replaceAll('星辰','满眼星辰')
// "大海满眼星辰,满眼星辰大海"

2. 数值分割符

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

代码语言:javascript
复制
1_6000_0000
// 160000000
160_000_000
// 160000000

3.新的内置对象WeakRef

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

代码语言: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.逻辑运算符与赋值表达式

代码语言:javascript
复制
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的一个子类,用于把单一的错误集合在一起。

代码语言:javascript
复制
    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 "失败"

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

代码语言:javascript
复制
    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谁快算谁的,不管成功或者失败,第一个结果就是最终结果。可以处理超时
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. string的新方法replaceAll
  • 2. 数值分割符
  • 3.新的内置对象WeakRef
  • 4.逻辑运算符与赋值表达式
  • 5.亮点 Promis.any
    • 应用场景
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档