ECMAScript-262

ECMAScript-262 定义了这门语言的以下几个部分:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 全局对象

ECMAScript 和 JavaScript 的关系是,前者是后者的规范,后者是前者的一种实现(其他实现如 JScript 和 ActionScript)。

2015 年 6 月发布的 ECMA-262 第 6 版,俗称 ES6、ES2015 或 ES Harmony。这版包含了可能是这个规范有史以来最重要的一批增强特性。正式支持了 Class、Module、Iterator、Generator(function *g() {})、箭头函数(() => {})、Promise、Reflect、Proxy 和 Symbol、Set、Map 等新的数据类型。

2016 年 6 月发布的 ECMA-262 第 7 版,也称 ES7 或 ES2016。新增Array.prototype.includes和指数操作符等特性。

2017 年 6 月发布的 ECMA-262 第 8 版,也称 ES8 或 ES2017。新增了async/awaitSharedArrayBufferObject.values()Object.entries()Object.getOwnPropertyDescriptors()以及字符串填充方法。

2018 年 6 月发布的 ECMA-262 第 9 版,也称 ES9 或 ES2018。新增了异步迭代(Async Iteration)、Rest/Spread 操作符、正则表达式新特性、Promise.finally()以及模板字符串(Template Literals)。

2019 年 6 月发布的 ECMA-262 第 10 版,也称 ES10 或 ES2019。新增了Array.prototype.flat()/flatMap()String.prototype.trimStart()/trimEnd()Object.fromEntries()Symbol.prototype.description属性、可忽略的 catch 参数、明确定义了Function.prototype.toString()方法返回值、固定了Array.prototype.sort()的顺序以及解决了 JSON 字符串兼容性问题。

2020 年 6 月发布的 ECMA-262 第 11 版,也称 ES11 或 ES2020。新增了动态importimport.metaexport增强、新的数据类型 BigInt、RegExp.prototype.matchAll()globalThisPromise.allSettled()?. , ??操作符。

2021 年 6 月发布的 ECMA-262 第 12 版,也称 ES12 或 ES2021。新增了String.prototype.replaceAll()Promise.any()AggregateError用于表示多个错误的集合、新的逻辑操作符??= , &&= , ||=、弱引用WeakRefFinalizationRegistry用于垃圾回收的注册、数字的分隔符1_000、更加精准的Array.prototype.sort

2022 年 6 月发布的 ECMA-262 第 13 版,也称 ES13 或 ES2022。模块顶层作用域支持await表达式、 新增私有类元素、静态块、in操作符支持私有类元素、正则新增d标志和其对应的hasIndices属性、提供了获取捕获组开始索引和结束索引的方法、Error实例增加cause属性,可携带更多错误信息、Strings、Arrays、TypedArrays新增at方法,支持关联访问、Object.hasOwn代替Object.prototype.hasOwnProperty,判断对象是否含有属性。