V8 主要版本与对应 ECMAScript 支持
V8 是 Google 开发的 JavaScript 引擎,用于 Chrome、Edge 和 Node.js。它不断更新以支持最新的 ECMAScript(ES)标准。以下是 V8 主要版本与对应 ECMAScript 支持 的关系,以及关键特性变化。
V8 版本与 ECMAScript 支持对照表
| V8 版本 | 对应 Chrome/Node.js 版本 | 主要支持的 ES 版本 | 关键新增特性 |
|---|---|---|---|
| V8 6.x (2017) | Chrome 63, Node.js 10 | ES2017 | async/await、Object.values/entries |
| V8 7.x (2019) | Chrome 79, Node.js 12 | ES2019 | Array.prototype.flat/flatMap、Object.fromEntries |
| V8 8.x (2020) | Chrome 84, Node.js 14 | ES2020 | Promise.allSettled、BigInt、globalThis |
| V8 9.x (2021) | Chrome 91, Node.js 16 | ES2021 | String.prototype.replaceAll、Logical Assignment (` |
| V8 10.x (2022) | Chrome 104, Node.js 18 | ES2022 | 类字段(#private)、Array.prototype.at()、Error.cause |
| V8 11.x (2023) | Chrome 113, Node.js 20 | ES2023 | Array.prototype.findLast/findLastIndex、Hashbang 支持 |
| V8 12.x (2024) | Chrome 122+, Node.js 21+ | ES2024(部分) | Records & Tuples(实验性)、Set.prototype.union/difference |
详细 ECMAScript 特性支持
1. ES2017(V8 6.x+)
async/await(异步函数)Object.values()/Object.entries()String.prototype.padStart/padEnd
2. ES2019(V8 7.x+)
Array.prototype.flat()/flatMap()Object.fromEntries()(键值对 → 对象)Optional catch binding(try {} catch {}不带参数)
3. ES2020(V8 8.x+)
BigInt(大整数运算)Promise.allSettled()(无论成功/失败都返回)globalThis(统一的全局对象)- 可选链操作符(
obj?.prop)
4. ES2021(V8 9.x+)
String.prototype.replaceAll()(全局替换)- 逻辑赋值运算符(
a ||= b、a &&= b) Numeric separators(1_000_000可读性)
5. ES2022(V8 10.x+)
- 类私有字段 & 方法(
#privateField) Array.prototype.at(-1)(支持负数索引)Error.cause(链式错误传递)Top-Level await(模块顶层直接await)
6. ES2023(V8 11.x+)
Array.prototype.findLast()/findLastIndex()Hashbang支持(#!/usr/bin/env node)Symbol.asyncDispose(资源管理)
7. ES2024(V8 12.x+,部分实验性)
- Records & Tuples(不可变数据结构
#{ x: 1 }/#[1, 2]) Set.prototype.union()/intersection()(集合操作)- 管道操作符(
|>,实验阶段)
如何检查当前 V8 的 ES 支持?
- 浏览器(Chrome/Edge):
- 访问
chrome://version查看 V8 版本。 - 在开发者工具(F12)控制台测试新语法(如
Array.prototype.at(-1))。
- 访问
- Node.js:
- 运行
node -p process.versions.v8查看 V8 版本。 - 使用
node --v8-options | grep "in progress"查看实验性特性。
- 运行
总结
- V8 版本 ≈ Chrome/Node.js 版本,每个大版本对应一个 ES 标准。
- ES2020+ 特性(如
BigInt、可选链) 在 V8 8.x+ 才完全支持。 - ES2022+(类私有字段、
Array.at()) 需要 V8 10.x+。 - 实验性功能(如 Records & Tuples) 需手动启用标志(
--harmony)。
如果需要兼容旧环境(如 IE 或低版本 Node.js),可使用 Babel 或 core-js 进行转译。
