ECMAScript 各个主要版本的关键特性概述
ECMAScript 是 JavaScript 的标准规范,各个版本的 ECMAScript 引入了许多新特性和改进。以下是 ECMAScript 各个主要版本的关键特性概述:
ECMAScript 1 (ES1)
发布日期: 1997年6月
特性:
基本的语法和数据类型(如 Number, String, Boolean, null, undefined)
核心对象(如 Object, Array, Function)
基础控制语句(如 if, for, while)
ECMAScript 2 (ES2)
发布日期: 1998年6月
特性:
主要是对 ES1 的小修小补,没有引入重大新特性。
ECMAScript 3 (ES3)
发布日期: 1999年12月
特性:
正则表达式支持
字符串处理方法(如 split, match, replace)
错误处理机制(try...catch)
更多的核心对象和方法
ECMAScript 4 (ES4)
状态: 放弃开发
原因: 因为复杂性和不兼容性问题,ES4 被放弃开发。
ECMAScript 5 (ES5)
发布日期: 2009年12月
特性:
严格模式 (use strict):更严格的解析和错误处理。
JSON 支持:原生 JSON 对象用于解析和序列化 JSON 数据。
数组方法:新增了 forEach, map, filter, reduce 等高阶函数。
属性描述符:通过 Object.defineProperty 和 Object.getOwnPropertyDescriptor 来定义和获取对象属性的特性。
函数绑定:Function.prototype.bind 方法。
字符串扩展:如 trim 方法。
ECMAScript 6 / ECMAScript 2015 (ES6 / ES2015)
发布日期: 2015年6月
特性:
箭头函数 (=>):简化函数定义。
类 (class):更简洁的面向对象编程。
模块 (import/export):支持模块化编程。
解构赋值:从数组或对象中提取数据并赋值给变量。
模板字符串:使用反引号(``)来创建包含插值的字符串。
Promise:异步编程的新方式。
let 和 const:块级作用域变量声明。
迭代器和生成器 (for...of, yield):新的迭代机制。
Map 和 Set:新的集合类型。
Proxy 和 Reflect:元编程的支持。
ECMAScript 2016 (ES7)
发布日期: 2016年6月
特性:
指数运算符 (**):用于幂运算。
Array.prototype.includes:检查数组是否包含某个元素。
ECMAScript 2017 (ES8)
发布日期: 2017年6月
特性:
async/await:更优雅的异步编程。
Object.values/Object.entries:方便获取对象的键值对。
字符串填充方法 (padStart/padEnd):在字符串开头或结尾填充字符。
共享内存和原子操作:新的并发模型。
ECMAScript 2018 (ES9)
发布日期: 2018年6月
特性:
异步迭代 (for-await-of):支持异步迭代器。
Rest/Spread 属性:在对象字面量中使用 Rest 和 Spread 操作符。
正则表达式改进:如命名捕获组、lookbehind 断言等。
Promise.prototype.finally:无论 Promise 结果如何都会执行的回调。
ECMAScript 2019 (ES10)
发布日期: 2019年6月
特性:
Array.prototype.flat/flatMap:扁平化数组。
Object.fromEntries:将键值对列表转换为对象。
String.prototype.trimStart/trimEnd:去除字符串开头或结尾的空白字符。
Optional Chaining (?.):安全访问可能为 null 或 undefined 的对象属性。
Nullish Coalescing Operator (??):处理 null 或 undefined 的默认值。
ECMAScript 2020 (ES11)
发布日期: 2020年6月
特性:
BigInt:支持任意精度整数。
动态导入 (import()):按需加载模块。
Nullish Coalescing Operator (??):处理 null 或 undefined 的默认值。
可选链 (?.):简化深层次对象属性访问。
全局对象 (globalThis):统一访问全局对象的方式。
Promise.allSettled:等待所有 Promise 完成,无论成功还是失败。
String.matchAll:返回匹配结果的所有捕获组。
ECMAScript 2021 (ES12)
发布日期: 2021年6月
特性:
逻辑赋值运算符 (&&=, ||=, ??=):结合逻辑运算符与赋值运算符。
数字分隔符 (_):提高数字可读性,例如 1_000_000。
String.prototype.replaceAll:替换所有匹配项。
WeakRef 和 FinalizationRegistry:弱引用和终结器注册表。
ECMAScript 2022 (ES13)
发布日期: 2022年6月
特性:
类的私有字段和私有方法:使用 # 前缀定义私有成员。
Error Cause:在抛出错误时提供上下文信息。
Top-Level Await:允许在顶层使用 await,而不仅仅是在异步函数中。
Array.prototype.at:根据索引获取数组元素,支持负索引。
ECMAScript 2023 (ES14)
发布日期: 2023年6月
特性:
Hashbang 支持:允许在脚本文件的第一行使用 #! 注释。
Array.findLast 和 Array.findLastIndex:查找数组中的最后一个匹配项及其索引。
Object.hasOwn:更可靠的检测对象自身属性的方法。
?. 链式调用优化:进一步优化可选链的性能和行为。
ECMAScript 2024 (ES15)
发布日期: 2024年6月
特性:
@Decorator
):用于修饰类或类成员。数组分组方法:Array.prototype.group
和 Array.prototype.groupToMap
。
异步可迭代增强:支持更复杂的异步迭代场景。
**管道运算符 (|>
):简化数据转换。
不可变数据结构(记录和元组):引入不可变数据结构。
ArrayBuffer
和 SharedArrayBuffer
的新功能:支持就地调整大小。
正则表达式标志 /v
:增强 Unicode 支持,包括字符串集合操作和多节点字符串。
每个版本都带来了显著的改进和新特性,使得 JavaScript 成为一个更加现代化和强大的编程语言。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通