JavaScript 新增特性总览(ES 5 → ES 2025)
下表按 ECMAScript 正式年度版本 汇总了 全部已标准化 的语法、API 与关键能力,并附简要说明。便于检索、对比与温故知新。
⚠️ 仅收录 到 2025 年 6 月正式发布的 ES 2025 规范;仍处于提案阶段(如 Pipeline、Records & Tuples、Pattern Matching 等)未列入。
ES5 (2009)
| 类别 | 新特性 | 作用简述 |
|---|
| 语法 | "use strict" | 开启严格模式,提前暴露潜在错误。 |
| 对象 | Object.create / defineProperty / keys | 精细控制属性、原型与枚举。 |
| Array | forEach map filter reduce every some … | 引入函数式数组处理。 |
| String | trim() | 去除首尾空白。 |
| Function | bind() | 固定 this,常用于回调。 |
| 其它 | 原生 JSON.parse / stringify、Getter/Setter、Date.now() | 引入现代 Web 必备能力。 |
ES6 (2015)
- let / const:块级作用域声明。
- 箭头函数:精简语法且不绑定
this。
- 模板字符串:多行 & 内插表达式。
- 解构、默认参数、剩余 / 扩展运算符:提升参数与数据拆装效率。
- 类与继承(
class extends)、模块(import / export)。
- Promise、Symbol、
Map Set WeakMap WeakSet:异步与新数据结构。
- Generator / for…of:自定义迭代协议。
- 二/八进制字面量、更多
Number/Math 方法等。
ES7 (2016)
| 特性 | 简述 |
|---|
** 指数运算符 | 2 ** 3 === 8,替代 Math.pow。 |
Array.prototype.includes() | 语义化元素存在性检测。 |
ES8 (2017)
| 特性 | 简述 |
|---|
async / await | 用同步写法组织 Promise 链。 |
Object.values / entries | 更方便遍历对象。 |
padStart / padEnd | 字符串填充。 |
允许参数尾随逗号、SharedArrayBuffer 与 Atomics 并发原语。 | |
ES9 (2018)
| 特性 | 简述 |
|---|
异步迭代 for await…of | 流式读取异步数据源。 |
Promise.prototype.finally() | 成功或失败后统一清理。 |
对象剩余 / 扩展 ...obj | 拷贝、排除属性。 |
正则增强:命名捕获组、反向断言、s (dotAll)。 | |
String.raw:获取模板字符串原始内容。 | |
ES10 (2019)
| 特性 | 简述 |
|---|
Array.flat() / flatMap() | 数组扁平化与映射。 |
Object.fromEntries() | 键值对转对象,与 entries 互逆。 |
trimStart / trimEnd | 精确去除空白。 |
Symbol.description、可选 catch 绑定、String.matchAll()、JSON ⊂ ECMAScript。 | |
ES11 (2020)
| 特性 | 简述 |
|---|
可选链 ?. | 安全访问深链属性。 |
空值合并 ?? | 仅在 null/undefined 时回退默认值。 |
动态 import() | 按需异步加载模块。 |
| BigInt | 任意精度整数。 |
Promise.allSettled()、globalThis、模块命名空间导出、WeakRef / FinalizationRegistry 等。 | |
ES12 (2021)
| 特性 | 简述 |
|---|
| 逻辑赋值 `&&= | |
String.replaceAll() | 全量替换免正则全局标志。 |
Promise.any() | 返回首个 fulfilled 结果。 |
数字分隔符 1_000_000、Array.at()、私有实例方法 / getter #private. | |
ES13 (2022)
| 特性 | 简述 |
|---|
顶层 await | 模块级异步初始化。 |
| 类字段 & 私有字段 | 直接在类体声明属性。 |
Object.hasOwn() | 安全替代 hasOwnProperty。 |
Error cause 选项 | 链式错误溯源。 |
findLast() / findLastIndex()、RegExp 匹配索引 (/d 标志)。 | |
ES14 (2023)
| 特性 | 简述 |
|---|
不可变数组方法 toSorted toReversed toSpliced with() | 返回新数组而不修改原值。 |
Hashbang (#!/usr/bin/env node) | 让脚本可直接在 Unix shebang 下执行。 |
| 微语法/性能修正若干(函数名称推断等)。 | |
ES15 (2024)
| 特性 | 简述 |
|---|
ArrayBuffer.transfer() | 在不复制数据的情况下调整缓冲区大小。 |
Number.range() | 原生数值区间迭代器。 |
Intl.DisplayNames v3、Intl.DurationFormat 等 Intl 补强。 | |
| 持续性能 / 语义修订(语法层暂无大型新增)。 | |
ES16 (2025) – 重磅更新 1 2 3
| 类别 | 新特性 | 用途摘要 |
|---|
| 模块 | Import Attributes / JSON Modules | import data from './config.json' with { type: 'json' } —— 原生加载非 JS 资源并附带元信息。 |
| 迭代器 | Iterator Helpers (map filter take drop toArray …) | 为所有迭代器带来与数组同款链式方法,懒执行、节省内存。 |
| 集合 | Set 方法:union intersection difference symmetricDifference isSubsetOf … | 常见集合运算无需手写循环。 |
| 正则 | RegExp.escape()、Pattern Modifiers、Duplicate named groups | 自动转义待匹配文本、按需复用捕获名,功能更强也更安全。 |
| Promise | Promise.try() | 把同步异常自动转换为 rejected Promise,统一错误处理流。 |
| 数值 & TypedArray | Float16Array、Math.f16round() | 支持 16-bit 浮点,高性能图形 / AI 计算。 |
| 其它 | Intl v4 更新、算法微优化、规范措辞整合。 | |
速查年表
| 年份 | 关键词 |
|---|
| 2009 | 严格模式、函数式数组方法、原生 JSON |
| 2015 | let/const、箭头、模板、类、模块、Promise |
| 2016-17 | **、includes、async/await |
| 2018-19 | 对象展开、finally、flat、fromEntries |
| 2020-21 | 可选链、BigInt、逻辑赋值、replaceAll |
| 2022-23 | 顶层 await、类字段、不可变数组 API |
| 2024-25 | Set 运算、Iterator Helpers、Import Attributes、Float16Array |
使用建议
- 按需引入:旧浏览器需配合 Babel / polyfill;优先使用对性能与可读性提升显著的特性。
- 渐进迁移:可选链、空值合并、顶层 await、不可变数组方法,是易替换旧代码的“低风险红利”。
- 关注 Stage-3+ 提案:Pipeline、Records & Tuples、Pattern Matching 等下一波特性正在稳步推进,可提前评估。
掌握规范节奏,才能写出 “向后兼容、向前友好” 的 JavaScript。