ECMAScript 版本
工作之余,摸鱼摸到了专业知识,就记录一下,供以后查阅。
ECMAScript(简称ES)是JavaScript的标准化规范,由Ecma International(原ECMA)通过ECMA-262标准制定。自1997年首个版本发布以来,其版本迭代持续推动语言能力的演进。以下是截至2025年4月的主要版本及其关键特性概述:
一、早期基础版本(1997-2009)
-
ES1 (1997)
首个正式版本,定义了基础语法和类型(如Number
、String
、Boolean
)及核心对象(如Object
、Array
)。ECMA-262的第1版本质上跟网景的JavaScript 1.1相同, 只不过删除了所有浏览器特定的代码,外加少量细微的修改。ECMA-262要求支持Unicode标准(以支 持多语言),而且对象要与平台无关(Netscape JavaScript 1.1的对象不是这样,比如它的Date对象就依 赖平台)。这也是JavaScript 1.1和JavaScript 1.2不符合 ECMA-262第 1版要求的原因。ECMA-262第 2版只是做了一些编校工作,主要是为了更新之后严格符合ISO/IEC-16262的要求, 并没有增减或改变任何特性。ECMAScript实现通常不使用第2版来衡量符合性(conformance)。 -
ES3 (1999)
引入正则表达式、try/catch
异常处理、switch
语句等,奠定现代JavaScript核心功能。ECMA-262第3版第一次真正对这个标准进行更新,更新了字符串处理、错误定义和数值输出。此 外还增加了对正则表达式、新的控制语句、try/catch异常处理的支持,以及为了更好地让标准国际化 所做的少量修改。对很多人来说,这标志着ECMAScript作为一门真正的编程语言的时代终于到来了。ECMA-262第 4版是对这门语言的一次彻底修订。作为对JavaScript在Web上日益成功的回应,开 发者开始修订ECMAScript以满足全球 Web开发日益增长的需求。为此,Ecma T39再次被召集起来, 以决定这门语言的未来。结果,他们制定的规范几乎在第3版基础上完全定义了一门新语言。第4版包 括强类型变量、新语句和数据结构、真正的类和经典的继承,以及操作数据的新手段。 与此同时,TC39委员会的一个子委员会也提出了另外一份提案,叫作“ECMAScript 3.1”,只对这 门语言进行了较少的改进。这个子委员会的人认为第4版对这门语言来说跳跃太大了。因此,他们提出 了一个改动较小的提案,只要在现有JavaScript引擎基础上做一些增改就可以实现。最终,ES3.1子委员 会赢得了TC39委员会的支持,ECMA-262第4版在正式发布之前被放弃。 -
ES5 (2009)
严格模式("use strict"
)、JSON
支持、数组方法(forEach
、map
)及属性描述符(Object.defineProperty
)。ECMAScript 3.1 变成了 ECMA-262的第 5版,于 2009年 12月 3日正式发布。第5版致力于厘清 第3版存在的歧义,也增加了新功能。新功能包括原生的解析和序列化JSON数据的JSON对象、方便 继承和高级属性定义的方法,以及新的增强ECMAScript引擎解释和执行代码能力的严格模式。第5版 在2011 年 6月发布了一个维护性修订版,这个修订版只更正了规范中的错误,并未增加任何新的语言 或库特性。
二、现代革命性版本(2015及之后)
-
ES6/ES2015
- 类与模块:引入
class
语法和模块化(import/export
)。 - 箭头函数、解构赋值、模板字符串。
- Promise:异步编程基础,
let
/const
块级作用域。 - ECMA-262第 6版,俗称ES6、ES2015或ES Harmony(和谐版),于2015年6月发布。这一版包 含了大概这个规范有史以来最重要的一批增强特性。ES6正式支持了类、模块、迭代器、生成器、箭头 函数、期约、反射、代理和众多新的数据类型。
- 类与模块:引入
-
ES2016 (ES7)
- 数组包含方法(
Array.includes
)和指数运算符(**
)。 - ECMA-262第7版,也称为ES7或ES2016,于2016年6月发布。这次修订只包含少量语法层面的 1 2 3 4 5 6 7 8 9 10 11 12 13 增强,如Array.prototype.includes 和指数操作符。
- 数组包含方法(
-
ES2017 (ES8)
-
async/await
:简化异步代码结构。 -
Object.values()
、Object.entries()
及字符串填充方法(padStart
/padEnd
)。 - ECMA-262第8版,也称为ES8、ES2017,完成于2017年6月。这一版主要增加了异步函数(async/ await)、SharedArrayBuffer 及 Atomics API,以及 Object.values()/Object.entries()/Object. getOwnPropertyDescriptors()和字符串填充方法,另外明确支持对象字面量最后的逗号。
-
-
ES2018 (ES9)
- 异步迭代器(
for-await-of
)、Rest/Spread属性(对象与数组展开)。 - 正则表达式改进(命名捕获组、
s
标志)及Promise.finally()
。 - ECMA-262第 9版,也称为 ES9、ES2018,发布于 2018年 6月。这次修订包括异步迭代、剩余和 扩展属性、一组新的正则表达式特性、Promise finally(),以及模板字面量修订。
- ECMA-262第10版,也称为ES10、ES2019,发布于2019年6月。这次修订增加了Array.prototype. flat()/flatMap()、String.prototype.trimStart()/trimEnd()、Object.fromEntries()方 法,以及Symbol.prototype.description 属性,明确定义了Function.prototype.toString() 的返回值并固定了Array.prototype.sort()的顺序。另外,这次修订解决了与 JSON字符串兼容的 问题,并定义了catch子句的可选绑定。
- 异步迭代器(
-
ES2020 (ES11)
- **
BigInt
**:支持大整数运算。 - 可选链操作符(
?.
)、空值合并运算符(??
)及动态导入(import()
)。
- **
-
ES2021 (ES12)
- 逻辑赋值运算符(
&&=
,||=
,??=
)、**replaceAll()
**方法及数字分隔符(_
)。
- 逻辑赋值运算符(
-
ES2022 (ES13)
- 私有类字段(
#field
)、**顶级await
**及错误原因链(Error.cause
)。
- 私有类字段(
-
ES2023 (ES14)
- 异步数组方法(
Array.fromAsync
)、Temporal
API(时间处理)及正则表达式增强。
- 异步数组方法(
-
ES2024 (ES15)
- 管道运算符(
|>
)、顶层await
、符号描述符(Symbol.description
)及模块导入导出优化。
- 管道运算符(
三、未来版本展望(2025及之后)
- ES2025 (ES16)
- 正则表达式增强:可能扩展字符集运算与匹配模式。
- 内存与并发优化:如
SharedArrayBuffer
的原子操作API改进。 - 语法糖提案:模式匹配(Pattern Matching)或简化条件分支。
四、ECMAScript的演进特点
-
渐进式创新
- 采用“年更”模式,每年发布新版本,平衡稳定性与前沿性(如ES6后每年6月更新)。
-
社区驱动
- TC39委员会主导提案流程(Stage 0至Stage 4),开发者可通过GitHub参与提案讨论与测试套件建设。
-
兼容性优先
- 新特性通常向下兼容,如ES6的模块化需通过构建工具(如Babel)转换以支持旧环境。
五、版本查询与兼容性
- 官方规范:ECMA-262https://tc39.es/ecma262/
- 提案跟踪:TC39 Proposalshttps://github.com/tc39/proposals
- 浏览器支持:需关注各引擎(V8、SpiderMonkey等)对特性的实现进度,可通过Can I Use查询。https://caniuse.com/
ECMAScript的持续演进反映了Web开发的复杂需求,开发者需关注标准进展与生态适配,以充分利用新特性提升代码质量与性能。
参考知识来源于网络和JavaScript高级程序设计