FE-06-ES6+ 与 ECMAScript 新特性演进
本节目标:系统梳理 ES6 (2015) 到 ES2024 的关键新特性,掌握现代 JS 写法的”为什么”和”怎么用”。
1. ES 演进时间线
| 版本 | 年份 | 关键特性 |
|---|---|---|
| ES5 | 2009 | strict mode、JSON、Array methods |
| ES6/ES2015 | 2015 | let/const、箭头函数、Promise、class、模块 |
| ES2016 | 2016 | ** 指数、Array.includes |
| ES2017 | 2017 | async/await、Object spread、Object.values |
| ES2018 | 2018 | Rest/Spread、async iteration、Promise.finally |
| ES2019 | 2019 | Array.flat、Object.fromEntries、String.trimStart/End |
| ES2020 | 2020 | ??、?.、BigInt、Promise.allSettled |
| ES2021 | 2021 | 逻辑赋值(` |
| ES2022 | 2022 | class 字段、顶层 await、Array.at、Error cause |
| ES2023 | 2023 | Array.findLast、Array.toSorted、hashbang 语法 |
| ES2024 | 2024 | Array.groupBy、Promise.withResolvers、Well-formed Unicode |
2. ES6/2015:现代 JS 起点
2.1 let / const
1 | // 块级作用域 |
2.2 解构赋值
1 | // 数组 |
2.3 模板字符串
1 | const name = 'Alice'; |
2.4 箭头函数
1 | const add = (a, b) => a + b; |
2.5 默认参数、Rest、Spread
1 | // 默认参数 |
2.6 Map / Set / WeakMap / WeakSet
1 | const map = new Map(); |
2.7 Promise(见 FE-04)
2.8 class
1 | class Animal { |
2.9 模块化(见 FE-04)
2.10 Symbol / Iterator / Generator
1 | const sym = Symbol('id'); |
2.11 Proxy / Reflect
1 | const handler = { |
3. ES2016-2017:稳定期
1 | // ES2016 |
4. ES2018-2019:迭代与对象
1 | // ES2018 |
5. ES2020:可空性 + BigInt
1 | // 可选链 ?. |
6. ES2021:逻辑赋值与便利
1 | // 逻辑赋值 |
7. ES2022:class 升级 + 顶层 await
1 | // class 公有字段 |
8. ES2023:findLast + hashbang
1 | // Array.findLast / findLastIndex |
9. ES2024:分组 + Promise.withResolvers
1 | // Array.groupBy / groupByMap |
10. 实战:现代 JS 写一个 Promise 并发控制器
1 | // 限制并发数的 Promise 调度器 |
小结
ES6/2015 是分水岭——之后的版本大多是”补丁和便利”,核心范式在 ES6 就定下了。
推荐的学习路径:
- 熟练 ES6(let/const、解构、箭头、Promise、class、模块)
- 熟悉 ES2017(async/await)
- 了解 ES2020(??、?.、BigInt)
- 偶尔看看新版本(按需)
Polyfill 策略:
- 现代项目:browserslist 配
"last 2 versions",新特性直接用 - 兼容性项目:用 core-js、Babel 转译
- Node.js:LTS 版本支持到 ES2022 左右
下一节讲前端工程化:Webpack / Vite / Rollup / esbuild。
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/09/26/FE-06-ES6+与ECMAScript演进/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!