JavaScript的起源
(1)1995年12月之前,Netscape公司(Brendan Eich设计)开发了Mocha脚本语言用在Navigator浏览器上,后来改名为LiveScript。其语法风格与Self及Scheme较为接近。
(2)1995年12月,Netscape管理层出于营销考虑与Sun合作,在LiveScript的基础上吸收Java因素,联合发表了JavaScript。所以,JavaScript与Java没多大关系,仅仅看起来像JAVA,Netscape的初衷是为了蹭Java的热度。微软同时期也推出了JScript来迎战JavaScript的脚本语言。
(3)1996年11月,Netscape公司将JavaScript提交给ECMA进行标准化。ECMA负责这事的机构是TC39,ECMA 国际组织第 39 号技术委员会。之后由ECMA推出这个脚本语言的标准,称为ECMA-262(即262号标准。注意以前的ECMAScript仅有262号标准,现在则包含 262,402,414三个标准,所以为了准确应该称呼ECMAScript标准。402和414可以看作附属标准)。标准化的脚本语言称为ECMA Script,由其继承而来的具体实现(与ECMA Script兼容,但包含超出ECMA Script的功能)不仅包括JavaScript,还包括JScript(Microsoft推出)和ActionScript(Adobe推出)等。
(4)1997年6月,ECMA-262标准的第一个版本ECMAScript 1推出。并于1998年4月被ISO/IEC吸收,批准为ISO/IEC 16262第一版;此后ECMAScript标准会被ISO/IEC直接吸收称为标准,只是版本不同。
ECMAScript版本历史
1997年6月,ECMAScript 1.0版发布。
1998年6月,ECMAScript 2.0版发布。
1999年12月,ECMAScript 3.0版发布,成为JavaScript的通行标准,得到了广泛支持。
2007年10月,ECMAScript 4.0版准备发布,但由于目标过于激进,事实上没有通过,被废弃。
2009年12月,ECMAScript 5.0版发布。
2011年6月,ECMAscript 5.1版(es5)发布,并且成为ISO国际标准(ISO/IEC 16262:2011)。
2015年6月,ECMAScript 6版(es6)发布,即ECMAScript 2015。包括ECMA-262第7版、ECMA-402第2版(之后ECMA-402几乎与ECMA-262同步更新,只是版本号不同)
2016年6月,ECMAScript 7.0版发布。包括ECMA-262第7版、ECMA-402第3版、ECMA-414第1版(ECMA-414在December 2016第二版之后至2023年未再更新)。
2017年6月,ECMAScript 8.0版发布。
2018年6月,ECMAScript 9.0版发布。
2019年6月,ECMAScript 10.0版发布。
2020年6月,ECMAScript 11.0版发布。
2021年6月,ECMAScript 12.0版发布。
2022年6月,ECMAScript 13.0版发布。
2023年6月,ECMAScript 14.0版发布。
截至2012年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3标准。
ECMAScript标准与ISO / IEC 16262标准的关系
其实前文已经说明了它们的关系。这里用ECMAScript 5.1强力证明,并给出出处。
ISO / IEC 16262第三版(此处可预览https://webstore.iec.ch/preview/info_isoiec16262%7Bed3.0%7Den.pdf)包括以下文本:
ISO/IEC 16262由Ecma International(Ecma-262)编制,并根据特殊的“fasttrack procedure”由ISO/IEC JTC 1信息技术联合技术委员会通过,同时获得ISO和IEC国家机构的批准。
在ECMA-262 5.1(https://www.ecma-international.org/wp-content/uploads/ECMA-262_5.1_edition_june_2011.pdf)也有这样说明:
ECMAScript标准的此版本5.1与国际标准ISO / IEC 16262:2011的第三版本完全一致。
ECMAScript标准原始出处
ECMA组织官网:http://www.ecma-international.org/
ECMA-262标准文档:ECMA-262 - Ecma International(全部历史版本在这个网页的下方)
ECMA-402 ECMAScript® 2023 internationalization API specification
ECMA-414 ECMAScript® specification suite
ECMA-404 The JSON data interchange syntax
NodeJS语法
由于es5出现于2011年,且相对于es3升级不大,而node.js创始于2009,所以现在的node.js应该是支持es5全部特性的。各处都难以查到这个问题,似乎更说明了NodeJS支持es5全部特性。
NodeJS V8以上直到2023年的V21,对es6的特性都不是全部支持的,而是99%,Node.js ES2015/ES6, ES2016 and ES2017 support 说明了node.js对es6的支持情况。
NodeJS中因es5和es6存在两种模块:CJS(CommonJS )和ESM,两种模块不兼容。ESM是更新的es6模块。Node.js默认用的是CommonJS 模块。要使用esm,需要导入它:npm install esm
es5的完整语法:ECMAScript Language Specification - ECMA-262 Edition 5.1
es6的完整语法:ECMAScript 2015 Language Specification – ECMA-262 6th Edition
参考
TC39、ECMA-262、ECMAScript 的一些事儿 - 知乎
NodeJS官方文档:文档 | Node.js