ES新特性
以下是 ES5(2009年)之后各个版本(ES6/ES2015 到 ES2023)的核心特性总结,按分类和版本组织,帮助快速掌握现代 JavaScript 的核心能力:
📌 ES6/ES2015(重大更新)
- 变量声明
let/const:块级作用域,解决var的变量提升问题。
- 箭头函数
() => {}:简写函数、自动绑定this(词法作用域)。
- 模板字符串
`${变量}`:支持多行文本和插值。
- 解构赋值
-
const { name, age } = obj; const [a, b] = array;
-
- 模块化
import/export:浏览器和 Node.js 原生支持的模块系统。
- 类(Class)
class Foo extends Bar {}:语法糖,本质基于原型链。
- Promise
- 解决回调地狱,链式调用
.then().catch()。
- 解决回调地狱,链式调用
- 增强的对象字面量
- 简写属性、方法:
{ name, sayHi() {} }。
- 简写属性、方法:
- Symbol
- 唯一值类型,用于定义对象唯一属性键。
- 默认参数
function(a = 1, b = 2) {}
📌 ES2016(ES7)
- 指数运算符
**2 ** 3 => 8(替代Math.pow(2,3))。
- 数组方法
Array.prototype.includes()[1,2].includes(1) => true(替代indexOf检查存在性)。
📌 ES2017(ES8)
async/await- 用同步语法写异步代码,配合 Promise 使用。
Object.values()/Object.entries()Object.values(obj)返回属性值数组。Object.entries(obj)返回键值对数组。
- 字符串填充
'hi'.padStart(4, ' ') => ' hi'。
- 共享内存与原子操作
SharedArrayBuffer和Atomics(高级并行编程)。
📌 ES2018(ES9)
- 对象展开运算符
const newObj = { ...obj, key: 'val' }。
- Promise.finally()
- 无论成功失败都执行的逻辑。
- 正则表达式增强
- 命名捕获组:
(?<name>pattern)。 - 反向断言:
(?<=...)和(?<!...)。
- 命名捕获组:
📌 ES2019(ES10)
- 数组方法
flat()/flatMap()[1, [2]].flat() => [1, 2]。
Object.fromEntries()- 键值对数组转对象,
Object.fromEntries([['a',1]]) => {a:1}。
- 键值对数组转对象,
trimStart()/trimEnd()- 清除字符串首尾空格。
📌 ES2020(ES11)
- 可选链操作符
?.obj?.a?.b避免因中间值为null/undefined报错。
- 空值合并运算符
??const val = a ?? 'default'(仅在a为null/undefined时生效)。
- 动态导入
import()- 按需异步加载模块:
const module = await import('path')。
- 按需异步加载模块:
BigInt类型- 支持超大整数:
9007199254740991n。
- 支持超大整数:
- 全局
globalThis- 统一浏览器和 Node.js 的全局对象引用。
📌 ES2021(ES12)
- 字符串方法
replaceAll()- 替换所有匹配项:
str.replaceAll('a', 'b')。
- 替换所有匹配项:
- 逻辑赋值运算符
a ||= b(等价于a = a || b)。
- Promise.any()
- 任意一个 Promise 成功即返回,全失败则抛出 AggregateError。
📌 ES2022(ES13)
- 顶层
await- 允许在模块顶层直接使用
await。
- 允许在模块顶层直接使用
- 类的私有字段/方法
- 用
#定义私有成员:class Foo { #privateMethod() {} }。
- 用
- 数组方法
at()arr.at(-1)支持负数索引获取元素。
📌 ES2023(ES14)
- 数组方法
findLast()/findLastIndex()- 从后向前查找数组元素。
- Hashbang 标准化
- 支持文件顶部写
#!/usr/bin/env node。
- 支持文件顶部写
🔧 使用建议
- 兼容性处理:通过 Babel 将新语法转译成 ES5,使用 core-js 提供 polyfill。
- 渐进增强:优先使用新特性提升代码可读性,但注意团队技术栈一致性。

浙公网安备 33010602011771号