好消息——ES2020新特性来了!这意味着,现在是时候全面了解ES2020中Javascript的新功能和改进功能了。让我们看看发生了什么变化。1.BigIntBigInt,Javascript中最令人期待的新特性终于来了。它允许开发人员在JS中使用更大的整数进行数据处理。以前,Javascript中的最大整数是pow(2,53)-1。但是,BigInt不受此限制。但是,正如您在上面看到的,您需要在数字后添加一个n。n表示这是一个BigInt,Javascript引擎应该对其进行特殊处理(无论是V8还是其他引擎)。由于遗留数字系统是IEEE754(不支持如此大的数字),因此此改进不向后兼容。2.Javascript的动态导入允许您将JS文件作为模块动态导入到您的应用程序中。就像您使用webpack和Babel一样。此功能可以帮助您处理按需代码加载、拆分代码,并且不需要webpack或其他模块处理器。如果愿意,您还可以在if-else块中加载代码。在if-else块中引入模块的优点是不会污染全局命名空间。3.NullcoalescingNullcoalescing实际上可以检查空值而不是错误值。您可能会问:nullish和falsely之间有什么区别?在Javascript中有很多值是错误的。例如:空字符串、数字0、undefined、null、false、NaN等。但是,在许多情况下,您只想检查变量是否为空——undefined或null,就像变量可以是空字符串或甚至是错误的价值。在此示例中,您将看到新的空合并运算符:??。您可以清楚地看到OR运算符总是返回一个真值,但是,空运算符返回一个非空值。4.可选链接可选链接语法允许您访问更深层次的嵌套对象属性,而不必担心该属性是否存在。如果,存在就好了。否则,将返回未定义。它不仅可以操作对象属性,还可以操作函数调用或数组。这样更方便!下面是一个演示:5.Promise.allSettledPromise.allSettled方法接收一组Promises并返回所有结果——不管它们是被resolved还是rejected。以前,这是不可能的,尽管有类似的实现,例如:race和all。它只会“履行所有承诺——不关心他们的结果”。6、String#matchAllmatchAll是String原型链上新增的方法,可以关联正则表达式。它返回一个迭代器,一个一个地返回所有匹配的组。我们来看一个演示:7.globalThis如果你写过可以运行在Node、浏览器或web-worker上的跨平台JS代码,你会花很多时间处理全局对象。这是因为不同的平台有不同的全局对象,比如浏览器中的window,Node中的global,webworker中的self。如果,有更多的运行时环境,这个对象就会不同。因此,您必须自己检查运行环境,以确定是否使用了正确的全局对象。ES2020给我们带来了globalThis对象,无论代码运行在哪里,它总是引用全局对象:8.在导出模块的命名空间Javascript模块中,总是可以使用如下语法:import*asutilsfrom'。/utils.mjs'但是,直到现在还不能使用像这样的导出语法:注意:当前支持(2020-04-24)export*asutilsfrom'./utils.mjs'以上和以下具有同样的结果:import*asutilsfrom'./utils.mjs'export{utils}9.明确定义for-in的顺序ECMA规范中并没有明确定义for(xiny)的顺序。虽然在此之前浏览器已经实现了一致的顺序,但现在已经被纳入了ES2020的官方规范。10、import.metaimport.meta由ECMAScript创建和实现,默认为null。考虑这个模块,module.js:你可以通过import.meta对象访问模块的相关元信息:console.log(import.meta);//{url:"file:///home/user/module.js"}它返回一个包含url属性的对象,它表示模块的URL。它可能是获取脚本的URL(对于外部脚本),或者是包含模块文档的基本URL(对于内联脚本)。总之,我喜欢Javascript社区不断发展的一致性和速度。看到Javascript如何从长达十年的胡言乱语演变为当今最强大、灵活和通用的语言,真是令人惊叹。
