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/await
、SharedArrayBuffer
、Object.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。新增了动态import
、i
、export
增强、新的数据类型 BigInt、RegExp.prototype.matchAll()
、globalThis
、Promise.allSettled()
、?. , ??
操作符。
2021 年 6 月发布的 ECMA-262 第 12 版,也称 ES12 或 ES2021。新增了String.prototype.replaceAll()
、Promise.any()
、AggregateError
用于表示多个错误的集合、新的逻辑操作符??= , &&= , ||=
、弱引用WeakRef
、FinalizationRegistry
用于垃圾回收的注册、数字的分隔符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
,判断对象是否含有属性。