ECMAScript 的主要特性和各大浏览器的支持情况

📌 ECMAScript 特性兼容速查表

版本 / 年份 关键特性 浏览器原生支持 Polyfill / 转译方案
ES5 (2009) 严格模式、Array.map/filter/reduceJSON 对象 IE9+、Chrome 10+、Firefox 4+、Safari 5+ 基本无需 polyfill,IE8 需 ES5-shim
ES6 / ES2015 let/const、箭头函数、模板字符串、解构赋值、Promiseclass、模块 import/export Chrome 49+、Firefox 45+、Safari 10+、Edge 13+(IE 不支持) Babel 转译为 ES5;Promisecore-js
ES7 / ES2016 Array.includes、指数运算符 ** Chrome 54+、Firefox 47+、Safari 10+ Array.includescore-js
ES8 / ES2017 async/awaitObject.entries/valuespadStart/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.finallycore-js
ES10 / ES2019 Array.flatArray.flatMapObject.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 转译;replaceAllcore-js
ES13 / ES2022 顶层 awaitArray.findLastObject.hasOwn Chrome 102+、Firefox 104+、Safari 15.4+ Babel 转译;core-js

🔧 推荐兼容性工作流

  1. 配置 Browserslist
    package.json 中定义目标浏览器范围,例如:

    "browserslist": [
      "> 0.5%",
      "last 2 versions",
      "not dead",
      "IE 11"
    ]
    

    这样 Babel 和 Autoprefixer 会自动按需处理。

  2. Babel + core-js

    • 使用 @babel/preset-env 按目标浏览器转译语法
    • 使用 core-js 按需引入缺失 API
  3. 特性检测(Feature Detection)
    在运行时判断是否支持某特性:

    if (!('includes' in Array.prototype)) {
      // 加载 polyfill 或降级方案
    }
    
  4. 渐进增强
    优先使用现代特性,旧浏览器提供简化功能或替代方案。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容