当前位置: 首页 > 后端技术 > Node.js

ES2020新特性

时间:2023-04-03 18:07:02 Node.js

1.使用#快速创建类的私有变量类的一个主要目的是为了在更多的模块中复用我们的代码,但是我们不想把所有的属性和方法都暴露出来,现在,有了这个新特性,我们可以很容易地实现这个想法,只需在我们的私有属性或方法前面添加一个#号:classMessage{#message="Howdy"greet(){console.log(this.#message)}}constgreeting=newMessage()greeting.greet()//Howdyconsole.log(greeting.#message)//privatename#messageisnotdefined2.当Promise.allSelected我们使用多个promise的时候,特别是当这些promise有依赖的时候,打印每个promise的log尤为重要,可以帮助我们调试错误。使用Promise.allSelected,我们可以创建一个新的promise,它在所有包含的promise都完成之前不会返回,这将使我们能够访问包含每个promise的返回值的数组constp1=newPromise((res,rej)=>setTimeout(res,1000));constp2=newPromise((res,rej)=>setTimeout(rej,1000));Promise.allSettled([p1,p2]).then(data=>console.log(数据)));//[//Object{status:"fulfilled",value:undefined},//Object{status:"rejected",reason:undefined}//]3.空值合并运算符??由于JavaScript的类型是动态的,我们在赋值变量时必须记住哪些值会被评估为true,哪些会被评估为false。当我们创建一个对象时,我们通常会将属性初始化为假值,例如空字符串或0。设置默认值变得很烦人,因为它会覆盖有效值,看看下面的演示,你会发现这真的很烦人:letperson={profile:{name:"",age:0}};console.log(person.profile.name||“匿名”);//Anonymousconsole.log(person.profile.age||18);//18在上面的例子中,结果可能不是我们想要的,我们认为名字为空或者0岁也是合理的,不应该被替换掉。我们可以替换||运营商与??运算符,因为??的类型检测判断是假的。console.log(person.profile.name??"Anonymous");//""console.log(person.profile.age??18);//04.可选链运算符和空合并运算符同样,JavaScript在处理假值时可能不会做我们想要的。我们可以在属性值未定义时返回默认值,但如果属性的路径未定义怎么办?答案是通过在点符号前添加一个问号,我们可以使属性路径的任何部分成为操作的可选部分。让人={};console.log(person.profile.name??"Anonymous");//person.profile未定义console.log(person?.profile?.name??"Anonymous");//匿名控制台。日志(人?.profile?.age??18);//18五、BigInt通常,我们不去深究技术细节,但是由于JavaScript处理数字的方式,当你深入挖掘时,事情就变了有点不靠谱。Javascript可以处理的最大数字是2^53,我们可以用MAX安全整数来查看。constmax=Number.MAX_SAFE_INTEGER;控制台日志(最大);//9007199254740991如果你超过这个数字,它会变得有点奇怪console.log(max+1);//9007199254740992console.log(max+2);//9007199254740992console.log(max+3);//9007199254740994console.log(Math.pow(2,53)==Math.pow(2,53)+1);//true我们可以使用新的数据类型BigInt来处理上面的问题。只需在数字后添加一个n符号,我们就可以使用疯狂的大数字。我们不能把标准数和BigInt数混淆,所以我们在进行数学计算时一般都会使用BigInt类型。constbigNum=100000000000000000000000000000n;console.log(bigNum*2n);//200000000000000000000000000000n六、使用async/await动态导入模块如果我们有很多功能函数,其中一些很少用到,那么一起导入会浪费资源,现在我们可以使用async/await来动态导入这些依赖,但是这样方法只适用于node.js环境。//math.jsconstadd=(num1,num2)=>num1+num2;导出{添加};constdoMath=async(num1,num2)=>{if(num1&&num2){constmath=awaitimport('./math.js');console.log(math.add(5,10));};};doMath(4,2);转自:https://alligator.io/js/es2020/原创文章,首发于个人网站,转载请注明出处