人人都会AI编程

附录 B ES6+ 特性速查表

更新时间:2026-07-11

以下按 ECMAScript 版本整理常用新特性,附带简要说明和代码示例,方便日常开发和快速回顾。特性名称后标注的版本为该特性首次引入的规范版本。

B.1 ES6(ES2015)—— 里程碑版本

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| let / const | 块级作用域变量声明,const 定义常量(值不可重新赋值) | let x = 1; const PI = 3.14; |
| 箭头函数 | 简洁的函数语法,不绑定自己的 this,arguments | const add = (a, b) => a + b; |
| 模板字符串 | 支持内嵌表达式和多行字符串 | ` Hello ${name} ` |
| 解构赋值 | 从数组或对象中提取值赋给变量 | const { name, age } = user; const [a, b] = arr; |
| 默认参数 + 剩余参数 | 函数参数可设默认值,...args 收集剩余参数 | function f(a, b = 1) { } |
| 展开运算符 | 在数组/对象中展开元素 | const newArr = [...arr1, ...arr2]; |
| Promise | 异步操作解决方案,替代回调地狱 | fetch(url).then(res => res.json()).then(...) |
| Class 语法 | 基于原型的面向对象写法 | class Animal { constructor(name) { this.name = name; } } |
| 模块化 (ESM) | 原生模块系统,支持 import / export | import React from 'react'; export default fn; |
| Symbol 类型 | 唯一且不可变的值,常用于对象私有属性 | const key = Symbol('desc'); |
| Map / Set | 新型数据集合:Map 键值对,Set 不重复值 | const m = new Map(); m.set('key', 'value'); |
| for...of 循环 | 遍历可迭代对象(数组、字符串、Map、Set 等) | for (const item of arr) { ... } |
| Proxy / Reflect | 代理拦截对象操作,元编程能力;Reflect 提供默认操作 | const proxy = new Proxy(obj, { get() {...} }); |
| 迭代器 / 生成器 | 自定义迭代行为;function 定义生成器,可暂停执行 | function gen() { yield 1; } |

B.2 ES2016(ES7)

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| Array.prototype.includes | 判断数组是否包含某值 | [1, 2, 3].includes(2) // true |
| 指数运算符 | 替代 Math.pow | 2 10 // 1024 |

B.3 ES2017(ES8)

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| async / await | 异步操作的同步写法,基于 Promise | const data = await fetch(url); |
| Object.values / Object.entries | 获取对象自有属性的值数组、键值对数组 | Object.values(obj); Object.entries(obj); |
| String padding | 字符串补全:padStartpadEnd | '5'.padStart(3, '0') // '005' |
| 共享内存与 Atomics | 多线程内存共享(Web Worker 场景) | 一般不常用,略 |

B.4 ES2018(ES9)

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| 异步迭代器 | for await...of 遍历异步数据流 | for await (const item of asyncIterable) { } |
| Rest/Spread 属性 | 对象也支持剩余/展开运算符 | const { a, ...rest } = obj; const newObj = { ...obj1, ...obj2 }; |
| Promise.finally | 无论成功或失败都会执行的回调 | promise.finally(() => { / 清理工作 / }); |
| 正则表达式命名捕获组 | 给正则捕获组命名,更可读 | ?<year>\d{4} 可引用 result.groups.year |

B.5 ES2019(ES10)

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| Array.prototype.flat / flatMap | 数组扁平化;flatMap 先 map 再 flat | [1, [2, 3]].flat() // [1, 2, 3] |
| Object.fromEntries | 将键值对列表转为对象 | Object.fromEntries([['name', 'Alice']]) |
| String.trimStart / trimEnd | 去除头部/尾部空格 | ' abc '.trimStart() |
| 可选 catch 绑定 | catch 中可以不声明参数 | try {...} catch { ... } |

B.6 ES2020(ES11)

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| 可选链操作符 ?. | 安全访问深层属性,防止 undefined 报错 | user?.address?.city |
| 空值合并操作符 ?? | 仅在左侧为 null 或 undefined 时取右侧 | const name = input ?? '默认值' |
| BigInt | 表示任意精度的整数 | const big = 123n; |
| 动态 import() | 运行时动态导入模块,返回 Promise | import('./module.js').then(m => m.default()); |
| Promise.allSettled | 等所有 Promise 结束(无论成功或失败) | Promise.allSettled([p1, p2]) |
| globalThis | 统一获取全局对象(浏览器 window,Node global) | globalThis |

B.7 ES2021(ES12)

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| String.replaceAll | 替换字符串中所有匹配项 | 'a-b-c'.replaceAll('-', '_') |
| Promise.any | 任一成功即返回,全失败才 reject | Promise.any([p1, p2]) |
| 逻辑赋值运算符 | &&=\|\|=??= 结合逻辑运算与赋值 | obj.prop ??= 'default'; |
| WeakRef | 弱引用对象,不阻止垃圾回收 | 一般用于缓存等特殊场景 |

B.8 ES2022(ES13)

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| Top-level await | 在模块顶层直接使用 await(无需 async) | const data = await fetch(...); |
| Class 字段声明 | 类中可以声明实例字段(静态、私有) | class A { #privateField = 1; static x = 2; } |
| at() 方法 | 数组、字符串用负索引访问元素 | [1,2,3].at(-1) // 3 |
| Object.hasOwn | 更安全的检查自身属性(比 hasOwnProperty 可靠) | Object.hasOwn(obj, 'prop') |
| Error.cause | 错误链中携带原因 | new Error('msg', { cause: originalError }) |

B.9 ES2023(ES14)

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| Array findLast / findLastIndex | 从数组末尾向前查找 | arr.findLast(item => item > 2) |
| Hashbang 语法 | 支持 #!/usr/bin/env node 开头的脚本 | 无需示例 |
| Symbol 作为 WeakMap 键 | WeakMap 的键可使用 Symbol 类型 | new WeakMap().set(symbol, value) |
| 修改数组的复制方法 | 新增 toSortedtoReversedtoSpliced 等不修改原数组的方法 | const sorted = arr.toSorted(); |

B.10 ES2024(ES15)主要特性

| 特性 | 简要说明 | 示例 |
|------|----------|------|
| Promise.withResolvers | 允许在外部 resolve/reject 一个 Promise | const { promise, resolve, reject } = Promise.withResolvers(); |
| Object.groupBy / Map.groupBy | 按条件对数组分组 | Object.groupBy(arr, item => item.type) |
| 正则 v 标志 | 增强的 Unicode 属性支持 | 较高级,可查 MDN |
| ArrayBuffer 可调整大小 | ArrayBuffer 可动态缩放 | 略 |

使用建议

  • 日常开发最常用:let/const、箭头函数、模板字符串、解构、Promise、async/await、可选链 ?.、空值合并 ??、数组方法(如 includes、flat、at)、Object.entries 等。
  • 类库/框架开发常涉及:模块化、Proxy、迭代器、Symbol、Class 私有字段等。
  • 新版本标准更新快,建议参考 MDN 文档或 TC39 proposals 仓库了解最新进度,生产环境使用前先确认浏览器/Node.js 兼容性,或借助 Babel 等工具转译。