JavaScript 新增特性总览(ES 5 → ES 2025)

272 阅读4分钟

JavaScript 新增特性总览(ES 5 → ES 2025)

下表按 ECMAScript 正式年度版本 汇总了 全部已标准化 的语法、API 与关键能力,并附简要说明。便于检索、对比与温故知新。

⚠️ 仅收录 到 2025 年 6 月正式发布的 ES 2025 规范;仍处于提案阶段(如 Pipeline、Records & Tuples、Pattern Matching 等)未列入。

ES5 (2009)

类别新特性作用简述
语法"use strict"开启严格模式,提前暴露潜在错误。
对象Object.create / defineProperty / keys精细控制属性、原型与枚举。
ArrayforEach map filter reduce every some …引入函数式数组处理。
Stringtrim()去除首尾空白。
Functionbind()固定 this,常用于回调。
其它原生 JSON.parse / stringify、Getter/Setter、Date.now()引入现代 Web 必备能力。

ES6 (2015)

  • let / const:块级作用域声明。
  • 箭头函数:精简语法且不绑定 this
  • 模板字符串:多行 & 内插表达式。
  • 解构、默认参数、剩余 / 扩展运算符:提升参数与数据拆装效率。
  • 类与继承class extends)、模块import / export)。
  • PromiseSymbolMap 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_000Array.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 v3Intl.DurationFormat 等 Intl 补强。
持续性能 / 语义修订(语法层暂无大型新增)。

ES16 (2025) – 重磅更新 1 2 3

类别新特性用途摘要
模块Import Attributes / JSON Modulesimport data from './config.json' with { type: 'json' } —— 原生加载非 JS 资源并附带元信息。
迭代器Iterator Helpers (map filter take drop toArray …)为所有迭代器带来与数组同款链式方法,懒执行、节省内存。
集合Set 方法union intersection difference symmetricDifference isSubsetOf …常见集合运算无需手写循环。
正则RegExp.escape()Pattern ModifiersDuplicate named groups自动转义待匹配文本、按需复用捕获名,功能更强也更安全。
PromisePromise.try()把同步异常自动转换为 rejected Promise,统一错误处理流。
数值 & TypedArrayFloat16ArrayMath.f16round()支持 16-bit 浮点,高性能图形 / AI 计算。
其它Intl v4 更新、算法微优化、规范措辞整合。

速查年表

年份关键词
2009严格模式、函数式数组方法、原生 JSON
2015let/const、箭头、模板、类、模块、Promise
2016-17**includesasync/await
2018-19对象展开、finallyflatfromEntries
2020-21可选链、BigInt、逻辑赋值、replaceAll
2022-23顶层 await、类字段、不可变数组 API
2024-25Set 运算、Iterator Helpers、Import Attributes、Float16Array

使用建议

  1. 按需引入:旧浏览器需配合 Babel / polyfill;优先使用对性能与可读性提升显著的特性。
  2. 渐进迁移:可选链、空值合并、顶层 await、不可变数组方法,是易替换旧代码的“低风险红利”。
  3. 关注 Stage-3+ 提案:Pipeline、Records & Tuples、Pattern Matching 等下一波特性正在稳步推进,可提前评估。

掌握规范节奏,才能写出 “向后兼容、向前友好” 的 JavaScript。