JavaScript 2018 中即将迎来的新功能

JavaScript 2018 中即将迎来的新功能:异步生成器及更好的正则表达式

2018 年 6 月发布的最新年度 ECMAScript 更新,尽管在常见功能的积压上仍然远远小于 ECMAScript 6,但依然是迄今为止最大的年度版本。

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

“异步生成器和迭代器是将异步函数和迭代器结合起来的结果,所以它就像你可以在其中等待的异步生成器或你可以从中得到返回值的异步函数,”他解释道。以前,ECMAScript 允许你编写一个可以输入或等待但不能同时进行两者操作的函数。“这对于在 Web 平台占比越来越大的消费流来说非常方便,尤其是在 Fetch 对象公开流的情况下。”

异步迭代器类似于 Observable 模式,但更灵活。“Observable 是推模型; 一旦你订阅了它,无论你是否准备好,你都会被爆炸式的事件和通知冲击,所以你必须实施缓冲或采样策略来处理干扰,”Terlson 解释道。异步迭代器是一种推拉模型 —— 你请求一个值后发送给你 —— 这对于诸如网络 IO 原语之类的东西更有效。

Promise.prototype.finally 对异步编程也很有帮助,在一个 promise 状态变为 fulfilled 或 rejected 后,指定一个最终方法来进行清理。

更多常规正则表达式功能

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

“自从 JavaScript 诞生之日起,ECMAScript 正则表达式就没有过显著进步;几乎所有其他编程语言的正则表达式库都比 ECMAScript 的功能高级。“ECMAScript 6 包含了一些小的更新,但他将 ECMAScript 2018 视为“第一次明显改变你如何编写正则表达式的更新”。

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

命名捕获组与许多其他语言中的命名组类似,你可以在命名正则表达式匹配的字符串中的不同部分,并将其视为对象。“这几乎等同于在你的正则表达式中添加注释,通过赋予它一个名字来解释该组试图捕捉的内容,”他解释道。“这个模式的一部分是月份,这是出生日期……这对于未来其他人维护你的模式真的很有帮助。”

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

以前 ECMAScript 有先行断言但没有后行断言。“人们使用了一些技巧,比如反转字符串,然后进行匹配,或一些其他 hacks,”Terlson 指出。这对于查找和替换的正则表达式特别有用。“你看到的并没有成为你匹配的一部分,所以如果你要替换前后任何一边有美元符号的数字,你就可以做到这一点而无需做额外的工作将美元符号重新放回去。”ECMAScript 后行断言允许像 C# 中那样的可变长度的后行断言,而不仅仅是 Perl 中的固定长度模式。

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

“Unicode 定义了数字,但这些数字不仅包括基本拉丁语 ASCII 0 到 9,还包括数学数字,粗体数字,大纲数字,花哨的演示数字,表格数字。如果要匹配 Unicode 中的任何数字,则 Unicode 可识别的应用程序必须具有可用的整个 Unicode 数据表。通过添加此功能,你可以将这些全部委托给 Unicode,”他说。如果你想以严格的方式匹配 Unicode 字符,比如说进行表单验证,并且你想做正确的事情而不是告诉人们他们的名称是无效的,这在很多情况下很难做到,但是使用 Unicode 字符类你可以明确指出名称所需的字符范围。已经有了不同语言和脚本的类,所以如果你只想处理希腊语或汉字,完全可以做到。Emoji 正变得越来越普遍。

还有一些新的国际化 API,用于本地化的日期和时间格式,欧元货币格式和复数形式,这样可以更轻松地执行本地化标签和按钮等操作。

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

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

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

未来发展;ECMAScript 2019

一些有趣的提案尚未达到成为 ECMAScript 标准的一部分所必需的第四阶段,包括对私有字段和方法的声明略有争议的想法,其中包括许多备选提案。

当在 ECMAScript 6 中引入类时,它们是“极小的”,Terlson 解释为“故意在很小[范围],因为我们将在以后继续处理它们。”私有字段允许开发人员声明可以在类的内部通过名称进行引用的字段,但不能从类的外部访问,”他说。这不只是提供了更好的性能,因为当在类构造函数中声明所有字段时,运行时可以更好地优化对象的处理,但也是语言强制实现隐私,而 TypeScript 中的私有字段则不是这样。与 symbols 不同,你可以使用 get 属性列出对象上的所有 symbols,私有字段将不允许反射。

“库作者正在寻求一种拥有私人状态的方式,以便开发者不能依赖它,”Terlson 解释道。“即使做了他们不应该做的事情,库也不喜欢打断用户。”例如,类中的私有属性将允许库作者避免暴露内部实现细节,如果他们将来可能会修改的话。

BigInt 提案也处于第三阶段。目前,ECMAScript 只有 64 位浮点数类型,但许多平台和 web API 使用 64 位整数 — 包括 Twitter 用作推文 ID 的 64 位整数。“你不能再将 JavaScript 中的推文 ID 表示为数字,”Terlson 解释道。“它们必须表示为一个字符串。” BigInt 是一个更通用的提案,用于添加任意精度的整数,而不只是添加 64 位整数。加密 API 和高精度计时器也将利用这一点,Terlson 预计 JIT JavaScript 引擎可能会使用原生 64 位字段来提供大整数以提升性能。

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

好了,本文就给大家介绍到这里,希望对大家有所帮助!

(0)

相关推荐

  • 纯javascript实现简单下拉刷新功能

    代码很简单,实现的功能却很实用,直接奉上代码 CSS: 复制代码 代码如下: <meta charset="utf-8" /> <title>Pull to Refresh</title> <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-sca

  • 纯JS实现AJAX局部刷新功能

    AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaScript和XML(标准通用标记语言的子集). AJAX 是一种用于创建快速动态网页的技术. 下面给大家介绍JS实现AJAX局部刷新功能,具体内容如下所示: 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. //

  • AngularJs实现聊天列表实时刷新功能

    昨天在做app的聊天列表时,遇到了一个问题,消息监听器监听到了一个新的消息,但是如果这时已经处于消息列表的页面那么消息列表并不会及时更新. 我的想法是在service层中的监听器方法里,当监听到了一个新的消息,那么就在根作用域中发出一个广播,告诉controller层需要去获取最新的消息列表了. service层中发出广播: controller层中接听广播: rootScope是所有scope的父级 它的广播(broadcast)和监听(on) 可以在无交集的controller间使用 sco

  • JavaScript 2018 中即将迎来的新功能

    JavaScript 2018 中即将迎来的新功能:异步生成器及更好的正则表达式 2018 年 6 月发布的最新年度 ECMAScript 更新,尽管在常见功能的积压上仍然远远小于 ECMAScript 6,但依然是迄今为止最大的年度版本. 身为 ECMAScript 编辑及微软在 ECMA TC39 委员会代表的 Brian Terlson 告诉 The New Stack:这个版本中两个最大的开发者功能是异步生成器和一些期待已久的正则表达式改进,以及 rest/spread 属性. "异步生

  • JavaScript ES2019中的8个新特性详解

    前言 JavaScript 不断改进和添加更多功能.TC39 已经完成并批准了 ES2019 的这 8 个功能,它有 4 个阶段,这些阶段是: Stage 0: Strawman Stage 1: Proposals Stage 2: Drafts Stage 3: Candidates Stage 4: Finished/Approved 以下链接可以查看Stage 0,Stage 1 – 3和Final Stage 可选的 Catch 绑定 能够在不使用 catch 绑定的地方选择性地删除它

  • Python 3.8正式发布重要新功能一览

    Python3.8有哪些你要关注的新内容?  Python3.8 都有哪些新功能,在文档手册中,大家可以有一个概览.这么多新内容,哪些是大家最先要关注一下的呢?下面,营长就带大家从深度和广度两方面,了解那些最大的变化,帮助大家快速上手 Python3.8. 新功能手册: https://docs.python.org/3.8/whatsnew/3.8.html 在本文中,你将了解到Python 3.8如何: 使用赋值表达式简化一些代码结构 在你自己的函数中强制执行仅位置参数 指定更精确的类型提示

  • 揭秘PowerShell 5.0新特性和新功能

    Windows PowerShell 5.0中包含了大量的新特性和新功能,提升了整体的用户体验.虽然其中一些功能只能供硬核PowerShell开发人员使用,但其他新功能和特性具有广泛的适用性. 例如其中一个新功能是远程文件编辑.管理员暂时可以通过PowerShell建立与另一个Windows服务器的远程会话.新的远程文件编辑功能在此基础之上进行构建,从而能够建立一个远程会话,然后在远程计算机上编辑文件. 建立远程会话的方法通常相同.你可以使用Enter-PSSession命令,附上–Comput

  • 2018即将推出的Apache Spark 2.4都有哪些新功能

    本文来自于2018年09月19日在 Adobe Systems Inc 举行的Apache Spark Meetup. 即将发布的 Apache Spark 2.4 版本是 2.x 系列的第五个版本. 本文对Apache Spark 2.4 的主要功能和增强功能进行了概述. 新的调度模型(Barrier Scheduling),使用户能够将分布式深度学习训练恰当地嵌入到 Spark 的 stage 中,以简化分布式训练工作流程. 添加了35个高阶函数,用于在 Spark SQL 中操作数组/ma

  • 详解Python 3.10 中的新功能和变化

    随着最后一个alpha版发布,Python 3.10 的功能更改全面敲定! 现在,正是体验Python 3.10 新功能的理想时间!正如标题所言,本文将给大家分享Python 3.10中所有重要的功能和更改. 新功能1:联合运算符 在过去, |符号用于 "算术或"运算,例如: print(0 | 0) print(0 | 1) print({1, 2} | {2, 3}) 输出: 0 1 {1, 2, 3} 在Python 3.10中, |符号有的新语法,可以表示x类型 或 Y类型,以

  • 关于visual studio 2012 update 2中的新功能介绍

    对于vs2012 update2中的新功能,确实很多.挑一个对于调试和写代码很有帮助的功能吧.codemap/代码图.该功能能够非常清楚和直观的让你理清代码的调用关系和引用关系. 传统的调试,应该都是设置各种断点,各种F11.现在有可视化的代码图方便你的调试. 并且可以在代码调试的时候去进行载入. 最重要的是可以在代码图中根据调试情况加入标签与颜色标记,方便自己调试与团队协作. 怎么样,这个新功能大家都知道吗?如果不知道建议赶紧用用,轻松你调试. 个人强烈推荐

  • Android Studio 4.0 新功能中的Live Layout Inspector详解

    最近 Android Studio 4.0 稳定版本正式发布,其中一个重要升级就是新版的Layout Inspector 旧版的Layout Inspector 4.0 之前我们通过Tools -> Android -> Layout Inspector 可以对当前进程现实中画面进行分析,获取视图的Hierarchy以及Property信息 Live Layout Inspector 4.0 通过同样的菜单可以打开新版的 Layout Inspector 运行APP后,选择当前进程,可以看到当

  • ES6中非常实用的新特性介绍

    ECMAScript 6离我们越来越近了,作为它最重要的方言,Javascript也即将迎来语法上的重大变革,InfoQ特开设"深入浅出ES6"专栏,来看一下ES6将给我们带来哪些新内容. 写在前面 ES6 已经提交给 Ecma 大会审查了,也就是说,我们将迎来一大波 javascript 的最新标准,还有一些语法糖.ES6 中有很多值得我们关注的东西,下面是我发现的一些我们最常用的一些新特性,进行记录一下. 1. for-of循环 这个东西用来循环数组很爽,原因呢,是因为它弥补了目前

  • 深入理解JavaScript程序中内存泄漏

    垃圾回收解放了我们,它让我们可将精力集中在应用程序逻辑(而不是内存管理)上.但是,垃圾收集并不神奇.了解它的工作原理,以及如何使它保留本应在很久以前释放的内存,就可以实现更快更可靠的应用程序.在本文中,学习一种定位 JavaScript 应用程序中内存泄漏的系统方法.几种常见的泄漏模式,以及解决这些泄漏的适当方法. 一.简介 当处理 JavaScript 这样的脚本语言时,很容易忘记每个对象.类.字符串.数字和方法都需要分配和保留内存.语言和运行时的垃圾回收器隐藏了内存分配和释放的具体细节. 许

随机推荐