ECMAScript语言规范发展
时间:2023-02-01 11:10:12
- ECMAScript语言规范的开发始于1996年11月。1997年6月,Ecma大会通过了本Ecma标准的第一版。最初的标准为ISO/IEC JTC 1,1998年4月核准为国际标准ISO/IEC 16262。
- 1998年6月的ECMA大会批准了ECMA-262的第二版,使其与ISO/IEC 16262完全一致。第一版和第二版之间的修改是编辑性质的。
- 第三版于1999年12月由Ecma大会通过,并于2002年6月作为ISO/IEC 16262:2002发布。第三版引入:
regular expressions(正则表达式)
、better string handling(更好的字符串处理)
、new control statements(新的控制语句)
、try/catch exception handling(try/catch异常处理)
、tighter definition of errors(更严格的错误定义)
、数字输出的格式和对未来语言增长的预期的微小变化。 - 第五版于2009年12月由欧洲化学品协会大会通过,于2011年批准为国际标准ISO/IEC 16262。2011年6月,ECMA大会通过了5.1版。第五版引入:存取字书写对象的反射式创建和检查、特性属性的程序控制、附加的数组操作函数、对JSON对象编码格式的支持以及提供增强的错误检查和程序安全性的严格模式。
特别说明的是第四版中出现了大量激进和不兼容的功能,以及缺乏重要实现者的支持,导致第四版无法发布,此标准文件被Brendan Eich称为Harmony。
- 第六版开发工作开始于2009年,于2015年6月获得大会通过。第六版是近几版来说最好的一半,大量的特性使JS用起来更舒服。第六版新增以下语法:
modules(模块)
、class declarations(类声明)
、lexical block scoping(词法块作用域)
、iterators and generators(迭代器和生成器)
、promises for asynchronous programming
、destructuring patterns(解构模式)
、proper tail calls(适当的尾部调用)
。ECMAScript内置函数库得到了扩展,以支持其他数据抽象,包括映射、集合和二进制数值数组,以及对字符串和正则表达式中Unicode补充字符的额外支持。第六版就是著名的ES6
- ES7于2016年6月发布,此版本新增:取幂运算符
**
(等同于Mat.pow()),数组增强功能:Array.prototype.includes
- 从第七版开始都是每年6月更新一个版本,ES8(2017)新增:
Async Functions(异步函数)
、Shared Memory(共享内存)
、async/await
、Object.values
、Object.entries
、Object.getOwnPropertyDescriptors
- ES9(2018)新增:AsyncIterator协议和异步生成器引入了对异步迭代的支持、正则:the dotAll flag, named capture groups, Unicode property escapes, and look-behind assertions
- ES10(2019)新增:
Array.prototype.flat
,Array.prototype.flatMap
、Array.prototype.sort
达到稳定、Object.fromEntries
、String.prototype.trimStart
、String.prototype.trimEnd
、JSON.stringify
返回格式正确的UTF-8 - ES11(2020)新增:
String.prototype.matchAll
动态import
、BigInt
、Promise.allSettled
、import.meta
、export * as ns from 'module'
、globalThis
、Nullish coalescing Operator(空值判断运算符:??)
、Optional Chaining(可选链运算符:?.)
- ES12(2021)新增:
String.prototype.replaceAll
、Logical Assignment Operator(逻辑赋值运算符: ??=)
、Numeric Separators(数字分隔符: 10_000)
、Promise.any
、WeakRef
、FinalizationRegistry
- ES13(2022)新增:
top-level await(允许模块顶级作用域使用await)
、类私有属性(#x)
、Object.prototype.hasOwn
、对于数组、字符串、TypedArray对象新增at方法
、Error.prototype.cause
、Array.prototype.findLast
、Array.prototype.findLastIndex