ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会)在标准ECMA-262中定义的脚本语言规范。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,但实际上后两者是ECMA-262标准的实现和扩展。

ECMAScript(简称 ES) 是 JavaScript 的标准,由 ECMA 国际(ECMA International)组织制定,官方编号 ECMA-262。
简单来说,ECMAScript 定义了 JavaScript 语言的语法和核心功能,然后不同的 JavaScript 引擎(如 V8、SpiderMonkey、JavaScriptCore)基于 ECMAScript 规范来实现 JavaScript。
ECMAScript发展历史
ECMAScript是由网景的布兰登·艾克开发的一种脚本语言的标准化规范;最初命名为Mocha,后来改名为LiveScript,最后重命名为JavaScript[1]。1995年12月,升阳与网景联合发表了JavaScript[2]。1996年11月,网景公司将JavaScript提交给欧洲计算机制造商协会进行标准化。ECMA-262的第一个版本于1997年6月被Ecma组织采纳。ECMAScript是由ECMA-262标准化的脚本语言的名称。
尽管JavaScript和JScript与ECMAScript兼容,但包含超出ECMAScript的功能[3]。
ECMAScript 版本每年更新一次,重要的版本包括:
版本 | 发布年份 | 主要特性 |
---|---|---|
ES1 | 1997 | 第一版 ECMAScript 规范 |
ES3 | 1999 | 添加正则表达式、try…catch 等 |
ES5 | 2009 | 严格模式("use strict" )、JSON 、Array.prototype.map |
ES6(ES2015) | 2015 | let / const 、箭头函数、类(class )、模块(import/export )、模板字符串 |
ES7(ES2016) | 2016 | Array.prototype.includes 、指数运算符(** ) |
ES8(ES2017) | 2017 | async/await 、Object.entries |
ES9(ES2018) | 2018 | 异步迭代(for await...of ) |
ES10(ES2019) | 2019 | Array.flat() 、Object.fromEntries() |
ES11(ES2020) | 2020 | BigInt 、Promise.allSettled() |
ES12(ES2021) | 2021 | String.replaceAll() 、Promise.any() |
ES13(ES2022) | 2022 | Object.hasOwn() , Error.cause |
ES14(ES2023) | 2023 | Array.prototype.toSorted() , Set methods |
最新版本和提案可以在 TC39 官网查看:
🔗 ECMAScript 规范
🔗 ECMAScript 提案
版本
[编辑]
版本 | 发表日期 | 与前版本的差异 |
---|---|---|
1 | 1997年6月 | 首版 |
2 | 1998年6月 | 格式修正,以使得其形式与ISO/IEC16262国际标准一致 |
3 | 1999年12月 | 强大的正则表达式,更好的词法作用域链处理,新的控制指令,异常处理,错误定义更加明确,数据输出的格式化及其它改变 |
4 | 放弃 | 由于关于语言的复杂性出现分歧,第4版本被放弃,其中的部分成为了第5版本及Harmony的基础;由ActionScript实现 |
5 | 2009年12月 | 新增“严格模式(strict mode)”,一个子集用作提供更彻底的错误检查,以避免结构出错。澄清了许多第3版本的模糊规范,并适应了与规范不一致的真实世界实现的行为。增加了部分新功能,如getters及setters,支持JSON以及在对象属性上更完整的反射[4][5][6][7][8] |
5.1 | 2011年6月 | ECMAScript标5.1版形式上完全一致于国际标准ISO/IEC 16262:2011。 |
6 | 2015年6月 | ECMAScript 2015(ES2015),第 6 版,最早被称作是 ECMAScript 6(ES6),添加了类和模块的语法,其他特性包括迭代器,Python风格的生成器和生成器表达式,箭头函数,二进制数据,静态类型数组,集合(maps,sets 和 weak maps),promise,reflection 和 proxies。作为最早的 ECMAScript Harmony 版本,也被叫做ES6 Harmony。 |
7 | 2016年6月 | ECMAScript 2016(ES2016),第 7 版,多个新的概念和语言特性[9] |
8 | 2017年6月 | ECMAScript 2017(ES2017),第 8 版,多个新的概念和语言特性[10] |
9 | 2018年6月 | ECMAScript 2018 (ES2018),第 9 版,包含了异步循环,生成器,新的正则表达式特性和 rest/spread 语法。 |
10 | 2019年6月 | ECMAScript 2019 (ES2019),第 10 版 |
11 | 2020年6月 | ECMAScript 2020 (ES2020),第 11 版 |
12 | 2021年6月 | ECMAScript 2021 (ES2021),第 12 版 |
13 | 2022年6月 | ECMAScript 2022 (ES2022),第 13 版 |
2004年6月Ecma组织发表了ECMA-357标准,它是ECMAScript的一个扩延,也被称为E4X(ECMAScript for XML)。
兼容性
许多应用程序支持ECMAScript,尤其是网页浏览器。下列表格列出了当前版本的软件与ECMAScript最新版本的兼容性。
脚本引擎 | 参考应用程序 | 兼容性[11] | |||
---|---|---|---|---|---|
ES5[12] | ES6[13] | ES7[14] | 较新(2016+)[14][15] | ||
Chakra | Microsoft Edge 18 | 100% | 96% | 100% | 48% |
SpiderMonkey | Firefox 94 | 100% | 98% | 100% | 100% |
Chrome V8 | Google Chrome 95、Opera 80、Microsoft Edge 95 | 100% | 98% | 100% | 100% |
JavaScriptCore(Nitro) | Safari 15 | 100% | 99% | 100% | 90% |
该测试的内容托管在官方存储库 https://github.com/tc39/test262 (页面存档备份,存于互联网档案馆) 中,也可以在 https://v8.github.io/test262/website/default.html (页面存档备份,存于互联网档案馆) 和 https://bakkot.github.io/test262-web-runner/ (页面存档备份,存于互联网档案馆) 上访问最新的Web浏览器测试包工具。官方存储库还指向由社区维护的其他项目测试包,以测试其他例如 Node.js 的 ECMAScript / JavaScript 环境。
JavaScript 和 ECMAScript 的关系
🔹 ECMAScript 是 JavaScript 的“核心语言”标准,它定义了 JavaScript 的基本语法、数据类型、对象、函数、作用域、事件循环等基础内容。
🔹 JavaScript 是 ECMAScript 的实现之一,并且扩展了 ECMAScript,比如增加了 DOM(文档对象模型)、BOM(浏览器对象模型) 等浏览器相关的功能。
类比:
ECMAScript 就像是汽车的基础设计规范,而 JavaScript 就像是按照这个设计规范制造出的汽车,不同的汽车品牌(Chrome、Firefox、Safari)会在基础规范上加入自己的特色功能(如 DOM、BOM)。
总结
- ECMAScript 是 JavaScript 的标准,定义了 JavaScript 的核心语法和特性。
- JavaScript 是 ECMAScript 的实现,同时扩展了 DOM、BOM 等功能。
- ECMAScript 规范每年更新,ES6(2015)是最重要的一次更新,引入了
let
、const
、箭头函数、类、模块等现代 JavaScript 关键特性。 - 现代 JavaScript(ES6+) 已经成为 Web 开发的标准,建议掌握 ES6 及以上的语法。
记住:所有 JavaScript 代码都符合 ECMAScript,但不是所有 ECMAScript 代码都能在所有 JavaScript 环境(如浏览器、Node.js)中运行!
参考文献
- ^ Krill, Paul. JavaScript creator ponders past, future. InfoWorld. 2008-06-23 [2013-10-31]. (原始内容存档于2014-09-20).
- ^ Press Release. Web.archive.org. [2013-10-31]. (原始内容存档于2007-09-16).
- ^ JScript VS JavaScript. About.com. 2015-11-25 [2018-06-30]. (原始内容存档于2015-11-26).
- ^ ECMA-262 5th Edition: ECMAScript Language Specification (PDF). [2010-04-08]. (原始内容存档 (PDF)于2015-04-12).
- ^ Changes to JavaScript, Part 1: EcmaScript 5. [2009-07-07]. (原始内容存档于2011-02-09).
- ^ 存档副本. [2009-07-07]. (原始内容存档于2011-08-22).
- ^ InfoQ: ECMAScript 5正式发布. [2010-04-08]. (原始内容存档于2010-04-10).
- ^ Javascript面面觀:核心篇《ECMA-262 Edition 5》. [2010-04-08]. (原始内容存档于2011-02-18).
- ^ ECMAScript 2016 Language Specification. Ecma International. 2016-06 [2016-08-20]. (原始内容存档于2016-08-20).
- ^ ECMAScript 2017 (ES8): the final feature set. 2ality. [2018-04-23]. (原始内容存档于2018-04-23).
- ^ ES5 is the baseline for this test suite. The conformance rate for other editions reflects support for new features only, not a comprehensive score.
- ^ ECMAScript 5 相容性列表. kangax.github.io. [2018-11-18]. (原始内容存档于2018-11-19) (英语).
- ^ ECMAScript 6 相容性列表. kangax.github.io. [2018-11-18]. (原始内容存档于2018-11-17) (英语).
- ^ 跳转到:14.0 14.1 ECMAScript 2016+ 相容性列表. kangax.github.io. [2018-11-18]. (原始内容存档于2018-11-24) (英语).
- ^ 包括从ES7到下一版草案的综合评分