问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ES12中8个很棒的新JavaScript语言特性

发布网友 发布时间:2024-10-01 11:02

我来回答

1个回答

热心网友 时间:2024-10-07 02:26

ES12中8个很棒的新JavaScript语言特性

JavaScript语言规范,也被称为ECMAScript或ES,每年都会根据需求进行修改,这不,ECMAScript2022就来了。

虽然JavaScript最初是一种脚本语言,但ECMAScript规范指出,该语言“现在被用于多种环境和较大规模的编程应用场景。”因此,JavaScript现在应该被理解为一种功能齐全的通用型编程语言。

让我们来看看ECMAScript2021引入了哪些JavaScript新功能吧!

String.prototype.replaceAll

replaceAll()方法接受一个字符串或正则表达式:模式pattern,这是它的第一个参数。第二个参数是模式的替换,参数名为replacement。给定这两个参数,replaceAll()将返回一个新字符串,该字符串是源字符串处理之后的字符串,其中所有pattern都替换为replacement。

replaceAll()方法的工作方式与replace()完全相同,但作用于字符串中的所有出现的pattern,而不仅仅是第一个。

letquote="alltheworld'sastage,andallthemenandwomenmerelyplayers";letnewQuote=quote.replaceAll("all","mostof");console.log(newQuote);promise.any()

promise.any()方法接受一组promise,并允许您通过返回新的promise来响应第一个成功完成的promise。

如果任何一个Promise出错,promise.any()仍然会根据集合中的第一个已解决的Promise进行操作。

如果传入的Promise都没有解析,则该方法返回被拒绝的Promise。

promise.any()——全部解决constpromise1=newPromise((resolve,reject)=>{setTimeout(resolve,1000,"1second");});constpromise2=newPromise((resolve,reject)=>{setTimeout(resolve,2000,"2second");});letpromises=[promise1,promise2];Promise.any(promises).then((firstResolved)=>{console.log(firstResolved);//outputs“1second”})promise.any()——全部被拒绝constpromise1=newPromise((resolve,reject)=>{setTimeout(reject,1000,"1second");});constpromise2=newPromise((resolve,reject)=>{setTimeout(reject,2000,"2second");});letpromises=[promise1,promise2];Promise.any(promises).then((firstResolved)=>{console.log(firstResolved);}).catch((err)=>{console.log("error:"+err)})//outputserror:AggregateError:AllpromiseswererejectedAggregateError

AggregateError是一种特殊的错误子类,它将许多错误组合成一个汇总对象。

在上面promise.any()——全部被拒绝的例子中返回了一个AggregateError。该错误包含描述错误的消息和包含有关每个错误的详细信息的数组。

AggregateError:Allpromiseswererejectederrors:Array(2)0:"1second"1:"2second"length:2message:"Allpromiseswererejected"stack:"AggregateError:Allpromiseswererejected"Newlogicalassignmentoperators

ECMAScript2021推出新的逻辑运算符||、??和&&。

Nullishassignment(??=)

我们可以使用??=来测试变量是否为null或未定义。如果变量为null或未定义,您可以将表达式的右侧分配给变量。

letquote="Whengoodnessislostthereismorality.";letexistingQuote="Aleaderisbestwhenpeoplebarelyknowheexists";letnonExistingQuote=null;existingQuote??=quote;nonExistingQuote??=quote;console.log(existingQuote);//Aleaderisbestwhenpeoplebarelyknowheexistsconsole.log(nonExistingQuote);//Whengoodnessislostthereismorality.

当作用于存在的变量时,例如existingQuote,空赋值运算符什么也不做。但是,当作用在nonExistingQuote上时,它会分配一个新值。

Andassignment(&&=)

和赋值运算符(&&=)用于表达式的左侧。如果左侧不为null或未定义,则分配表达式的右侧。如果它是假的,则什么也不做。

letemptyString="";emptyString&&="bar";console.log(emptyString);//“”letnonEmptyString="foo";nonEmptyString&&="bar";console.log(nonEmptyString);//“bar”Orassignment(||=)

or赋值运算符与您刚刚看到的and赋值运算符作用相反。

letemptyString="";emptyString||="bar";console.log(emptyString);//“bar”letnonEmptyString="foo";nonEmptyString||="bar";console.log(nonEmptyString);//“foo”WeakRef

WeakRef用于引用目标对象,而不会将其从垃圾回收器中拿出。一个常见的用例是WeakRef为大对象实现缓存或映射,“不希望大对象仅仅因为它出现在缓存或映射中而保持活动状态。”

FinalizationRegistry

该规范提供了消耗许多文件句柄的长时间运行进程的示例。在这种情况下,使用FinalizationRegistry可以确保没有句柄泄漏。

与WeakRef一样,FinalizationRegistry更适合平台和框架开发人员的工具箱,而不是应用程序开发人员。

Numericliteralseparators数字分隔符letdistanceToSun=91772000000;letdistanceToSun=91_772_000_000;

上面两种赋值结果一样,可以让我清楚的查看大数字。

Array.prototype.sortimprovements

这更像是一个注释而不是一个功能。ECMAScript2021规范对Array.prototype.sort工作原理的描述更加准确。这种变化应该会减少引擎之间实现起来的差异。

翻译来源:8greatnewJavaScriptlanguagefeaturesinES12|InfoWorldhttps://www.infoworld.com/article/3658393/8-great-new-javascript-language-features-in-es12.html

原文:https://juejin.cn/post/7098572094677450765
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑屏保息屏时间设置怎么设置电脑几分钟自动锁屏时间 如何设置电脑三分钟锁屏怎么设置电脑几分钟自动锁屏时间 为什么CF玩一段时间ping好高 关于CFping高的问题 抖音免费蓝v是永久的吗?需要什么条件? 求皮卡堂金冠。女号跪求啦!要钱很多很多。衣服很多很多。要发35级以 ... 3a证书多少钱一套 成人教育都包括什么 成人教育有哪几种形式 成人教育包括哪些 Promise.race()原理解析及使用指南 Promise原理解析,你值得拥有 Promise.any()原理解析及使用指南 Promise.allSettled()原理解析及使用指南 雅漾修颜抚纹眼霜的去皱效果怎么样? 有哪些好用的去皱眼霜? 平安线下有什么贷款 平安贷款什么流程 网络犯罪常见罪名有哪些 苹果笔记本如何切换投影 简单的阐述概括一下网络犯罪的概念是什么呢 网络安全犯罪的共同犯罪都包括了哪些内容呢 macbookair怎么切换快捷键 八面威风成语接龙-八面威风的成语接龙 婴儿眼睛进毛毛怎么办 电商投手是什么职业 请教一下大师,台式电脑的无线网卡是带天线的好还是不带天线的好?光_百... 梦见去吃饭遇到前男友、然后他没钱结账、我出来就被狗咬了大腿、然后... 南海法学是c刊吗 Photoshop CS3 不能使用魔棒,因为没用足够内存RAM 支付宝余额宝不安全 Async、Await 从源码层面解析其工作原理 支付宝余额安全还是余额宝安全 详解async/await —— 从入门到实现原理 我在中国,也想在新加坡找工作,有什么途径吗? 余额跟余额宝哪个安全 小米6和小米5x买哪个好 徐州38周可以剖腹产吗? 每次住院都要查血吗?在徐州妇幼保健院 求助苹果7plus.怎么通话录音 ai可以做轮播图吗ai可以滚轮缩放吗 颈椎不好会怎么样 大染坊演职员表 直通车的出价如何统一调整? 直通车溢价怎么调整?有哪些方法? 冰糖炖梨和什么不能一起吃 qq空间V8怎么设置访问权? 什么平台存钱利息高 什么软件存款利息最高 网上购物哪个平台好优惠券