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。
- 渐进增强:优先使用新特性提升代码可读性,但注意团队技术栈一致性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY