📌 ECMAScript 特性兼容速查表
| 版本 / 年份 | 关键特性 | 浏览器原生支持 | Polyfill / 转译方案 | ||
|---|---|---|---|---|---|
| ES5 (2009) | 严格模式、Array.map/filter/reduce、JSON 对象 |
IE9+、Chrome 10+、Firefox 4+、Safari 5+ | 基本无需 polyfill,IE8 需 ES5-shim | ||
| ES6 / ES2015 |
let/const、箭头函数、模板字符串、解构赋值、Promise、class、模块 import/export
|
Chrome 49+、Firefox 45+、Safari 10+、Edge 13+(IE 不支持) | Babel 转译为 ES5;Promise 用 core-js
|
||
| ES7 / ES2016 |
Array.includes、指数运算符 **
|
Chrome 54+、Firefox 47+、Safari 10+ |
Array.includes 用 core-js
|
||
| ES8 / ES2017 |
async/await、Object.entries/values、padStart/padEnd
|
Chrome 55+、Firefox 52+、Safari 11+ | Babel 转译 async/await;core-js 补 API |
||
| ES9 / ES2018 | 异步迭代器、Promise.finally、对象展开 {...obj}
|
Chrome 63+、Firefox 58+、Safari 11.1+ | Babel 转译;Promise.finally 用 core-js
|
||
| ES10 / ES2019 |
Array.flat、Array.flatMap、Object.fromEntries、可选 catch 参数 |
Chrome 73+、Firefox 62+、Safari 12+ | core-js |
||
| ES11 / ES2020 | 可选链 ?.、空值合并 ??、BigInt、动态 import()
|
Chrome 80+、Firefox 74+、Safari 13.1+ | Babel 转译(BigInt 需额外库如 big-integer) |
||
| ES12 / ES2021 | 逻辑赋值 &&=, ` |
=,??=、String.replaceAll` |
Chrome 85+、Firefox 79+、Safari 14+ | Babel 转译;replaceAll 用 core-js
|
|
| ES13 / ES2022 | 顶层 await、Array.findLast、Object.hasOwn
|
Chrome 102+、Firefox 104+、Safari 15.4+ | Babel 转译;core-js
|
🔧 推荐兼容性工作流
-
配置 Browserslist
在package.json中定义目标浏览器范围,例如:"browserslist": [ "> 0.5%", "last 2 versions", "not dead", "IE 11" ]这样 Babel 和 Autoprefixer 会自动按需处理。
-
Babel + core-js
- 使用
@babel/preset-env按目标浏览器转译语法 - 使用
core-js按需引入缺失 API
- 使用
-
特性检测(Feature Detection)
在运行时判断是否支持某特性:if (!('includes' in Array.prototype)) { // 加载 polyfill 或降级方案 } 渐进增强
优先使用现代特性,旧浏览器提供简化功能或替代方案。