当前位置: 首页 > news >正文

ECMAScript 版本

工作之余,摸鱼摸到了专业知识,就记录一下,供以后查阅。

ECMAScript(简称ES)是JavaScript的标准化规范,由Ecma International(原ECMA)通过ECMA-262标准制定。自1997年首个版本发布以来,其版本迭代持续推动语言能力的演进。以下是截至2025年4月的主要版本及其关键特性概述:

一、早期基础版本(1997-2009)​

  1. ES1 (1997)​

    首个正式版本,定义了基础语法和类型(如NumberStringBoolean)及核心对象(如ObjectArray)。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)。
  2. 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版在正式发布之前被放弃。
  3. ES5 (2009)​

    严格模式​("use strict")、JSON支持、数组方法(forEachmap)及属性描述符(Object.defineProperty)。ECMAScript 3.1 变成了 ECMA-262的第 5版,于 2009年 12月 3日正式发布。第5版致力于厘清 第3版存在的歧义,也增加了新功能。新功能包括原生的解析和序列化JSON数据的JSON对象、方便 继承和高级属性定义的方法,以及新的增强ECMAScript引擎解释和执行代码能力的严格模式。第5版 在2011 年 6月发布了一个维护性修订版,这个修订版只更正了规范中的错误,并未增加任何新的语言 或库特性。

二、现代革命性版本(2015及之后)​

  1. ES6/ES2015

    • 类与模块​:引入class语法和模块化(import/export)。
    • 箭头函数、解构赋值、模板字符串。
    • Promise​:异步编程基础,let/const块级作用域。
    • ECMA-262第 6版,俗称ES6、ES2015或ES Harmony(和谐版),于2015年6月发布。这一版包 含了大概这个规范有史以来最重要的一批增强特性。ES6正式支持了类、模块、迭代器、生成器、箭头 函数、期约、反射、代理和众多新的数据类型。
  2. 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 和指数操作符。
  3. 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()和字符串填充方法,另外明确支持对象字面量最后的逗号。
  4. 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子句的可选绑定。
  5. ES2020 (ES11)​

    • ​**BigInt**​:支持大整数运算。
    • 可选链操作符​(?.)、空值合并运算符​(??)及动态导入(import())。
  6. ES2021 (ES12)​

    • 逻辑赋值运算符​(&&=||=??=)、**replaceAll()**方法及数字分隔符(_)。
  7. ES2022 (ES13)​

    • 私有类字段​(#field)、**顶级await**及错误原因链(Error.cause)。
  8. ES2023 (ES14)​

    • 异步数组方法​(Array.fromAsync)、Temporal API​(时间处理)及正则表达式增强。
  9. ES2024 (ES15)​

    • 管道运算符​(|>)、顶层await符号描述符​(Symbol.description)及模块导入导出优化。

三、未来版本展望(2025及之后)​

  • ES2025 (ES16)​
    • 正则表达式增强​:可能扩展字符集运算与匹配模式。
    • 内存与并发优化​:如SharedArrayBuffer的原子操作API改进。
    • 语法糖提案​:模式匹配(Pattern Matching)或简化条件分支。

四、ECMAScript的演进特点

  1. 渐进式创新

    • 采用“年更”模式,每年发布新版本,平衡稳定性与前沿性(如ES6后每年6月更新)。
  2. 社区驱动

    • TC39委员会主导提案流程(Stage 0至Stage 4),开发者可通过GitHub参与提案讨论与测试套件建设。
  3. 兼容性优先

    • 新特性通常向下兼容,如ES6的模块化需通过构建工具(如Babel)转换以支持旧环境。

五、版本查询与兼容性

  • 官方规范​:ECMA-262https://tc39.es/ecma262/
  • 提案跟踪​:TC39 Proposalshttps://github.com/tc39/proposals
  • 浏览器支持​:需关注各引擎(V8、SpiderMonkey等)对特性的实现进度,可通过Can I Use查询。https://caniuse.com/

ECMAScript的持续演进反映了Web开发的复杂需求,开发者需关注标准进展与生态适配,以充分利用新特性提升代码质量与性能。

参考知识来源于网络和JavaScript高级程序设计

相关文章:

  • 意法半导体(ST)重磅收购Deeplite,边缘AI版图再扩张
  • LangChain4j +DeepSeek大模型应用开发——3 人工智能服务 AIService
  • 制药领域的技术革命:Profinet转CanOpen网关大放异彩
  • alibaba的EasyExcel导出合并单元格,超简单
  • 深度相机(一)——深度相机模型及用途介绍
  • 天梯——算式拆分
  • 在g2o图优化框架中,顶点(Vertex)和边(Edge)的定义与功能的区别
  • SAP-ABAP:ABAP内存:SAP开发中的数据暂存利器解析
  • V Rising 夜族崛起 [DLC 解锁] [Steam] [Windows SteamOS]
  • C语言学习路线
  • TypeScript中的函数类型定义与类型约束
  • web服务与Nginx
  • MySQL 主从复制
  • 二叉树的所有路径(回溯算法基础)
  • 蓝牙耳机开发--TWS蓝牙耳机双向通信充电盒设计
  • 滑动窗口模板
  • 《系统分析师-第三阶段—总结(六)》
  • Android Studio学习记录1
  • 软件测试全流程与主流测试方法详解:从理论到实战
  • Rabbitmq下载和安装(Windows系统,百度网盘)
  • 五万吨级半潜船在沪完成装备装载
  • 牛市早报|今年国内核电项目审批首次开闸,离境退税起退点下调
  • 热点问答|第三轮间接谈判结束,美伊分歧还有多大?
  • 大学2025丨专访北邮校长徐坤:工科教育要真正回归工程本质
  • 网络游戏用户规模和市场销售创新高,知识产权保护面临哪些挑战?
  • 欢迎回家!日本和歌山县4只大熊猫将于6月底送返中国