大家好,我是前端队长道廷。想要获取更多前端精彩内容,关注我(全网同名)解锁前端成长新姿势。全文如下:2021年6月22日,第121届Ecma国际(EcmaInternational)会议将以电话会议的形式召开。ES2021标准正式通过,ECMAScript2021(ES12)成为事实上的ECMAScript标准。这篇文章简单介绍一下今年JavaScript新增了哪些语法,好在不多。主要有5个新特性:逻辑赋值运算符编号分隔符Promise.any&AggregateErrorString.prototype.replaceAllWeakRefs&FinalizationRegistry对象逻辑赋值运算符??=&&=and||=??=判断逻辑与??一致如果左值为null或未定义,则返回右值,否则返回左值。不同之处在于??=涉及对左值的赋值。类似于+=-=中的等号。//oldleta=null;a=a??'daotin';a=a&&'daotin';a=a||'daotin';//newleta=null;a??='daotin';a&&='daotin';a||='daotin';数字分隔符允许数字文字在中间包含不连续的_以提高可读性。1_000_000_000//啊,十亿101_475_938.38//这是数亿leta=1_1;//11leta=1__1//错误,只允许一个下划线作为数字分隔符leta=1_;//错误,分隔字符不能在末尾leta=_1;//错误,分隔符不能在头部Number(1_1);//11号('1_1');//NaN注意:分隔符不能在末尾和头部,只能在数字之间,只能有一个下划线作为数字分隔符,不能连续。分隔符不影响数字转换值,在将字符串转换为数字值时也不会被识别。Promise.any&AggregateErrorPromise.any方法:any将Promise数组作为参数并返回组合的Promise。每当给定迭代中的承诺成功时,使用第一个承诺的值作为其返回值,constpromises=[fetch('/endpoint-a').then(()=>'a'),fetch('/endpoint-b').then(()=>'b'),fetch('/endpoint-c').then(()=>'c'),];try{constfirst=awaitPromise.any(承诺);//任何承诺都已兑现。控制台日志(第一);//→例如'b'}catch(error){//所有的承诺都被拒绝了。console.assert(errorinstanceofAggregateError);//记录拒绝值:console.log(error.errors);//→[//,//,////]}这个代码示例检查哪个端点响应最快,并将其记录下来。只有当所有请求都失败时,我们才会进入处理错误的catch块。多个Promise实例被打包成一个新的Promise实例:namedescriptionall只要有一个Promise失败,就会立即返回failure,所有成功都会返回一个success数组。只要完成一个Promise,就会返回结果(不管成功还是失败)。任何只要一个Promise成功,都会立即返回成功,所有失败都会返回AggregateErrorallSettled。prototype.replace,如果不使用全局正则表达式,则无法替换字符串中子字符串的所有实例。只有第一个匹配的字符将被替换。'你好世界'.replace('o','_');//hell_world'helloworld'.replace(/o/g,'_');//hell_w_rld'helloworld'.replaceAll('o','_');//hell_w_rldWeakRefs&FinalizationRegistryobject一般来说,在JavaScript中,对对象的引用都是强引用的,也就是说只要持有一个对象的引用,就不会被垃圾回收。只有当对象没有任何强引用时,js引擎垃圾回收器才会销毁对象,回收对象占用的内存空间。让obj={a:1,b:2};//只要我们访问obj对象,这个对象就不会被垃圾回收,但是WeakRefs可以创建一个弱引用。对象的弱引用是指当对象应该被js引擎使用时,垃圾回收器进行回收时,并不妨碍垃圾回收器进行回收。Weakref实例有一个deref方法,它返回被引用的原始对象,如果原始对象已被收集,则返回未定义的对象。constref=newWeakRef({name:'daotin'});letobj=ref.deref();if(obj){console.log(obj.name);//daotin}注意:正确使用它们需要仔细考虑,如果可能的话最好避免使用它们。当对象被垃圾收集器回收时,使用FinalizationRegistry对象执行回调函数。//构造监听对象被垃圾回收器清除时的回调constregistry=newFinalizationRegistry(heldValue=>{console.log('----',heldValue);});常量对象={};consttoken={};//注册监听registry.register(obj,"objdeleted!",token);//注销监听registry.unregister(token);//可能很久以后,回调执行//----objdeleted!registerparameter它们是:?需要监控的对象?执行回调函数的参数?取消监控的标识符参考链接:?https://h3manth.com/ES2021?https://juejin.cn/post/697851...?https://mp.weixin.qq.com/s/pRkTLu6mocANvl8UDwZPwg#at---完---大家好,我是前端组长道廷,专注前端分享和认知。希望在这里和大家分享我的前端学习和工作经验,记录个人成长。想要获取更多前端精彩内容,关注我(全网同名)解锁前端成长新姿势。