ECMAScript

編程語言规范

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

ECMAScript
编程范型多重编程范式基于原型编程函数程式语言指令式编程
设计者布兰登·艾克Ecma国际
发行时间1997年,​27年前​(1997
当前版本
    编辑维基数据链接
    型态系统弱类型动态
    网站ecma-international.org 编辑维基数据链接
    主要实作产品
    SpiderMonkeyV8ActionScriptJScriptQtScriptInScript英语InScript (JavaScript engine)
    启发语言
    SelfHyperTalk英语HyperTalkAWKCPerlPythonJavaScheme
    ECMAScript
    扩展名
    .es
    互联网媒体类型
    application/ecmascript
    开发者昇阳电脑公司
    Ecma国际
    首次发布1997年6月,​27年前​(1997-06
    最新版本
    第 13 版
    2022年6月,​2年前​(2022-06
    格式类型脚本语言
    网站ECMA-262ECMA-290
    ECMA-327ECMA-357
    ECMA-402

    历史

    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]

    版本

    版本 发表日期 与前版本的差异
    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 环境。

    参考文献

    1. ^ Krill, Paul. JavaScript creator ponders past, future. InfoWorld. 2008-06-23 [2013-10-31]. (原始内容存档于2014-09-20). 
    2. ^ Press Release. Web.archive.org. [2013-10-31]. (原始内容存档于2007-09-16). 
    3. ^ JScript VS JavaScript. About.com. 2015-11-25 [2018-06-30]. (原始内容存档于2015-11-26). 
    4. ^ ECMA-262 5th Edition: ECMAScript Language Specification (PDF). [2010-04-08]. (原始内容存档 (PDF)于2015-04-12). 
    5. ^ Changes to JavaScript, Part 1: EcmaScript 5. [2009-07-07]. (原始内容存档于2011-02-09). 
    6. ^ 存档副本. [2009-07-07]. (原始内容存档于2011-08-22). 
    7. ^ InfoQ: ECMAScript 5正式发布. [2010-04-08]. (原始内容存档于2010-04-10). 
    8. ^ Javascript面面觀:核心篇《ECMA-262 Edition 5》. [2010-04-08]. (原始内容存档于2011-02-18). 
    9. ^ ECMAScript 2016 Language Specification. Ecma International. 2016-06 [2016-08-20]. (原始内容存档于2016-08-20). 
    10. ^ ECMAScript 2017 (ES8): the final feature set. 2ality. [2018-04-23]. (原始内容存档于2018-04-23). 
    11. ^ ES5 is the baseline for this test suite. The conformance rate for other editions reflects support for new features only, not a comprehensive score.
    12. ^ ECMAScript 5 相容性列表. kangax.github.io. [2018-11-18]. (原始内容存档于2018-11-19) (英语). 
    13. ^ ECMAScript 6 相容性列表. kangax.github.io. [2018-11-18]. (原始内容存档于2018-11-17) (英语). 
    14. ^ 14.0 14.1 ECMAScript 2016+ 相容性列表. kangax.github.io. [2018-11-18]. (原始内容存档于2018-11-24) (英语). 
    15. ^ 包括从ES7到下一版草案的综合评分

    外部链接