ECMASCript 2019可能会有哪些特性?
Posted 81for
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECMASCript 2019可能会有哪些特性?相关的知识,希望对你有一定的参考价值。
最近这些年,ECMASCript标准发展节奏非常稳定,每年都会发布新的特性。那么,ECMASCript 2019可能会有哪些特性呢?
ECMASCript语法提案的批准流程
javascript的标准即为ECMAScript,其标准委员会是TC39。
所有语法提案都需要经历标准的批准流程,该流程包括5个阶段:
Stage 0 - Strawman(展示阶段)
Stage 1 - Proposal(征求意见阶段)
Stage 2 - Draft(草案阶段)
Stage 3 - Candidate(候选阶段)
Stage 4 - Finished(定案阶段)
只有语法特性到达Stage 4,该特性才能成为正式的ECMAScript标准。但是,JS引擎例如V8(Chrome和Node.js)以及SpiderMonkey(Firefox)会试验性地支持Stage 4之前的语法特性,这样开发者可以进行测试和反馈。
当我写这篇博客的时候,还没有新的Stage 4的语法提案,处于Stage 3的语法提案有好几个。ES2019可能不会包括所有Stage 3的语法提案。事实上,有些提案已经被搁置很多年了。
Class相关变化
有好几个提案是针对Class的,包括:
属性定义
私有方法及属性
静态方法及属性
代码示例如下:
class Truck extends Automobile { |
个人认为,使用#
来定义私有成员不是很好,学习其他语言,使用private
来定义显然更好。
String的trimStart()与trimEnd()方法
String有一个trim()方法可以移除字符串开头和结尾的空格,而trimStart()与trimEnd()方法则可以分别移除开头和结尾的空格:
const one = " hello and let "; |
有趣的是,不少浏览器已经支持了这2个方法。可见,浏览器们一直在推动ECMASCript标准的进步。
使用BigInt定义大整数
Number所能定义的最大整数为2^53 ,对于更大数,则可以使用BigInt来定义:
// 最大的Number |
关于BigInt的更多使用示例,可以查看BigInt: arbitrary-precision integers in JavaScript
Array的flat()与flatMap()方法
如果你学习过函数式编程,那么你应该知道flat()和flatMap()。flat()可以将一个包含嵌套数组的数组变换为一维数组。
const nestedArraysOhMy = [ "a", ["b", "c"], ["d", ["e", "f"]]]; |
flatMap()与map()类似,当回调函数返回数组时,flatMap()返回的是一维数组,而map()返回的是嵌套数组:
const scattered = [ "my favorite", "hamburger", "is a", "chicken sandwich" ]; |
其他ES2019候选特性
这些是当前的Stage 3候选特性:
globalThis
动态import()
遗留的RegExp特性 features
import.meta
String的matchAll()方法
Object.fromEntries()
规范JSON.stringify
标准化命令行程序的Hashbang
ES2019什么时候发布?
过去几年,TC39通常在6月份发布ECMAScript标准。因此,ES2019很可能也会在今年6月份发布。
如何试用ES2019特性?
其实有些特性其实JS引擎已经支持了,我们只需要配置一下就好了。
使用Node.js 11
Node.js使用V8引擎,而V8引擎已经支持了一些最新的特性,例如Array.prototype.flat和String.prototype.trimEnd,因此使用最新版的Node.js,即Node.js 11即可试用这些特性。
我使用的Node.js版本为11.8.0:
node -v |
如果要启用某个特性,可以使用node命令的--harmony-{feature-flag}
选项。使用--v8-options
,则可以查看node命令的所有选项,一些实验性的特性被标记为”in progress”。
macOS / Linux
node --v8-options | grep "in progress" |
Windows
node --v8-options | find "in progress" |
例如,当我们的Node.js代码index.js中的Class有静态方法,则在执行的时候添加--harmony-static-fields
选项即可:
node --harmony-class-fields --harmony-static-fields index.js |
使用Babel 7.0 +
使用Babel,我们就可以使用最新的JavaScript语法了,因为它会对代码进行转换以兼容旧的浏览器。
Babel支持通过一些插件来支持实验性的JS特性。Babel所支持的ECMAScript特性提案可以查看babel/proposals仓库。
以上是关于ECMASCript 2019可能会有哪些特性?的主要内容,如果未能解决你的问题,请参考以下文章