欧洲计算机制造商协会(European Computer Manufacturers Association)或简称 ECMA. ECMA走向全球后,在1994 年更名为:Ecma International。其商标“ECMA”由于历史原因被保留了下来,沿用至今。
ECMA-262是一种规范(官网中可以查到各个版本的PDF提案),自然会有满足这种规范的具体的语言被创造出来。最著名的就是JavaScript
(现在商标属于Oracle),在1995年由Netscape公司的Brendan Eich,在Netscape导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。其设计思路如下:
- 借鉴 C 语言的基本语法。
- 借鉴 Java 语言的数据类型和内存管理。
- 借鉴 Scheme 语言,将函数提升到“第一等公民”(first class)的地位。
- 借鉴 Self 语言,使用基于原型(prototype)的继承机制。
ECMAScript 各版本
ECMAScript 1.0 (1997):第一个正式标准,规范化了 JavaScript 的核心语言。
ECMAScript 3.0 (1999):该版本为语言带来了正则表达式、try/catch 异常处理以及更多的核心改进。
ECMAScript 5.0 (2009):引入了 strict mode(严格模式),并添加了许多数组方法(如 forEach、map、filter 等)。这次更新被认为是 JavaScript 现代化的重要一步。
ECMAScript 6 (ES2015):这是 ECMAScript 发展中的里程碑式版本,增加了 let 和 const 变量声明、类和模块系统、箭头函数、解构赋值、模板字符串、Promise、Symbol、迭代器和生成器等新特性。
ECMAScript 7 (ES2016):主要是增加了两个新特性:Array.prototype.include和取幂运算符。
ECMAScript 8 (ES2017):主要变化包括:Object.values/Object.entries、字符串填充、Object.getOwnPropertyDescriptor、尾随逗号、异步函数、共享内存和原子,等。
ECMAScript 9 (ES2018):ECMAScript 2018 主要包含内容:
- 异步迭代器:原生支持在 JavaScript 中对异步获取的数据做迭代。
- Object Rest/Spread Properties
- Promise.prototype.finally
- Template Literal(模板字面量):取消 Escape-Sequenzen 限制
- 正则表达式:
- 支持 s (dotAll) 模式
- Unicode 属性转义(Property Escape)
- 支持后行断言(Lookbehind Assertions)
- 命名捕获组(named capture group)
ECMAScript 10 (ES2019):
- Array.prototype.flat() 和 Array.prototype.flatMap()
- Object.fromEntries()
- String.prototype.trimStart() 和 String.prototype.trimEnd()
- Array.prototype.sort() 改进
- Symbol.prototype.description
- Function.prototype.toString() 的改进
- JSON.prototype.{stringify, parse} 的改进
- JSON.stringify() 现在会忽略 undefined、symbol、函数 等值。
- JSON.parse() 对 NaN、Infinity 和 -Infinity 的处理变得更加严格,报错而不是返回这些值。
- RegExp.prototype.flags.
RegExp.prototype.flags
属性返回正则表达式的标志(如 g, i, m 等),这是一个只读的属性,简化了获取正则标志的方式。 - Optional Catch Binding (可选的 catch 绑定). 在 ES10 中,try…catch 语句中的 catch 变量现在是可选的,可以不指定错误对象变量。
- Well-formed JSON.stringify() 的改进. ES10 对 JSON.stringify() 进行了改进,确保序列化结果是符合 JSON 格式的,修复了一些潜在的问题。
ECMAScript 11 (ES2020):
- Optional Chaining(可选链操作符 ?.)
- Nullish Coalescing Operator(空值合并操作符 ??)
- BigInt
- Promise.allSettled()
- globalThis
- String.prototype.matchAll()
- Array.prototype.sort() 的稳定性
- 模块化的顶层 await
- Import.meta
- 模块内的顶层 await 和新的 import 机制