手机版

JavaScript 2018的新特性

时间:2021-08-29 来源:互联网 编辑:宝哥软件园 浏览:

JavaScript 2018即将推出的新特性:异步生成器和更好的正则表达式

2018年6月发布的ECMAScript最新年度更新,虽然常用功能的积压量仍远小于ECMAScript 6,但仍是迄今为止最大的年度版本。

ECMAScript的编辑、微软在ECMA TC39委员会的代表Brian Terlson告诉New Stack,这个版本中最大的两个开发者函数是异步生成器和一些期待已久的正则表达式改进,以及rest/spread属性。

他解释说:“异步生成器和迭代器是异步函数和迭代器相结合的结果,所以它就像一个异步生成器,你可以在其中等待,或者一个异步函数,你可以从中获得返回值。在过去,ECMAScript允许您编写一个可以输入或等待的函数,但不能同时输入和等待。“这对于Web平台上日益庞大的消费流非常方便,尤其是Fetch对象公开该流时。”

异步迭代器类似于可观察模式,但更灵活。“可观察是一种推动模型;一旦订阅,无论你是否准备好,你都会受到爆炸性事件和通知的影响,所以你必须实施缓冲或采样策略来处理干扰,”泰尔森解释说。异步迭代器是一个推拉模型,——。在你请求一个值后,它会发送给你——,这对于网络IO原语之类的东西更有效。

promise . prototype . final对异步编程也很有帮助。在承诺状态变为已履行或已拒绝后,指定一个最终方法来清除它。

更通用的正则表达式功能

Terlson对正则表达式的改进特别兴奋(大部分工作由V8团队完成,他们已经完成了这四个主要功能的早期实现),因为这是这种语言的落后领域。

“自从JavaScript诞生以来,ECMAScript正则表达式并没有取得重大进展;几乎所有其他编程语言的正则表达式库都比ECMAScript更高级。”ECMAScript 6包含一些小的更新,但他认为ECMAScript 2018是“第一个明显改变您编写正则表达式方式的更新”。

DotAll标志使点字符匹配所有字符,并且不再对匹配某些换行符(如n或f)无效。他指出:“你不能使用点字符,除非你处于多行模式,并且你不关心每行的结尾。这方面的变通方法产生了一些不必要的复杂正则表达式,Terlson期望“每个人都可以在正则表达式中使用这种模式”。

命名捕获组类似于许多其他语言中的命名组。您可以命名由正则表达式匹配的字符串的不同部分,并将它们视为对象。他解释说:“这几乎相当于在你的正则表达式中添加注释,并给它一个名称,以解释该组试图捕获的内容。“这个模型的一部分是月份,也就是出生日期.对别人以后维护你的模式真的很有帮助。”

还有其他关于空字符的建议,即告诉正则表达式引擎在模式匹配中忽略空格、换行符和注释,并允许在空格后的行尾添加注释。这个特性可能会包含在未来版本的ECMAScript中,并将进一步提高可维护性。

过去,ECMAScript有前置断言,没有后置断言。泰尔森指出:“人们使用一些技术,比如反转字符串并匹配它们,或者其他一些黑客技术。这对于查找和替换正则表达式特别有用。“你所看到的不是你匹配的一部分,所以如果你想在前面或后面的任何一面用美元符号替换一个数字,你可以这样做,而不需要做额外的工作来把美元符号放回去。”ECMAScript后置断言允许像C#中那样的可变长度后置断言,而不仅仅是Perl中的固定长度模式。

特别是对于需要支持国际用户的开发人员来说,允许Unicode属性在正则表达式中转义\\p{…}和\\P{…}将使创建Unicode可识别的正则表达式变得更加容易。目前这对于开发者来说是一件非常麻烦的事情。

Unicode定义了数字,但这些数字不仅包括基本的拉丁ASCII 0到9,还包括数学数字、粗体数字、大纲数字、花哨的演示数字和表格数字。要匹配Unicode中的任何数字,支持Unicode的应用程序必须有一个完整的可用Unicode数据表。通过添加这项功能,您可以将所有这些委托给Unicode,”他说。如果你想以严格的方式匹配Unicode字符,例如表单验证,并且你想做正确的事情而不是告诉人们他们的名称无效,在许多情况下很难做到这一点,但是使用Unicode字符类,你可以清楚地指出名称所需的字符范围。已经有不同语言和文字的类了,如果只想处理希腊文或者汉字,完全可以。表情符号越来越流行了。

还有一些新的国际化API,用于本地化日期和时间格式、欧元货币格式和复数形式,这使得执行本地化标签和按钮变得更加容易。

ECMAScript 2018扩展了对象和数组对rest和spread模式的支持(这在React生态系统中很常见,很多开发人员并没有意识到它还没有完全标准化),Terlson称之为影响很大的小函数。静止和扩散对于复制和克隆对象很有用。例如,如果您有一个不可变的结构,并且您想要改变除了一个属性之外的所有内容,或者您想要复制一个对象但是添加一个额外的属性。Terlson指出,这种模式通常用于为期权记录分配默认值。"对于你一直在做的事情来说,这是一个非常好的语法模型."

ECMAScript 2018的很多功能已经得到了Babel和TypeScript等转换器的支持。浏览器支持也将随着时间的推移而实现,所有新功能都已在Chrome中发布(有关完整的支持矩阵图,请查看ECMAScript兼容性表)。

ECMAScript兼容性表检测到浏览器支持。

未来发展;ECMAScript 2019

一些有趣的提议尚未达到成为ECMAScript标准一部分所必需的第四阶段,包括关于私有字段和方法声明的稍微有争议的想法,包括许多替代提议。

当ECMAScript 6中引入类时,它们是“最小的”,Terlson解释为“故意(在范围内)很小,因为我们将来会继续处理它们。”私有字段允许开发人员声明可以在类内按名称引用的字段,但不能从类外访问,”他说。这不仅提供了更好的性能,因为当所有字段都在类构造函数中声明时,运行时可以更好地优化对象的处理,而且它也是强制实施隐私的语言,但TypeScript中的私有字段不是。与符号不同,您可以使用get属性列出对象上的所有符号,私有字段不允许反射。

“图书馆作者正在寻找一种拥有私人地位的方法,这样开发者就不能依赖它了,”泰尔森解释道。“即使他们做了不该做的事,图书馆也不喜欢打断用户。”例如,类中的私有属性将允许库作者避免暴露内部实现细节,如果他们将来可能修改它们的话。

BigInt提案也处于第三阶段。目前ECMAScript只有64位浮点数,但很多平台和web API都使用64位整数——包括Twitter用作推文ID的64位整数。“你不能再用JavaScript把推文ID表达成数字了,”泰尔森解释道。"它们必须用字符串表示."BigInt是一个更通用的建议,用于添加任意精度的整数,而不仅仅是64位整数。加密API和高精度定时器也将利用这一点。Terlson预计JIT JavaScript引擎将使用本机64位字段来提供大整数以提高性能。

两项提案已进入第四阶段;使catch绑定成为可选的(如果不需要实际使用变量,则不需要将变量传递给catch块),并进行小的语法更改以处理JSON和ECMAScript字符串格式之间的不匹配。这些将与其他提案一起进入ECMAScript 2019,这些提案将在未来几个月取得进展。

好了,这篇文章就介绍给大家了,希望对大家有所帮助!

版权声明:JavaScript 2018的新特性是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。