avaScript 的版本核心围绕 ECMAScript(ES)标准 演进(ES 是 JS 的语法和特性基础,通常说的 JS 版本本质是 ES 版本),同时需区分浏览器 / Node.js 的支持情况,以下是清晰梳理:

一、核心 ECMAScript(ES)关键版本(重点必知)

ES 版本发布年份核心特性(改变 JS 开发的关键功能)通俗称呼 / 备注
ES3 1999 奠定 JS 基础语法(变量、函数、循环、对象等),兼容性极强(所有浏览器都支持) 经典基础版,无现代特性
ES5 2009 新增 forEach/map/filter 数组方法、JSON 原生支持、Object.defineProperty(Vue2 响应式核心)、严格模式(use strict) 现代 JS 起点,兼容性覆盖所有主流浏览器(含 IE9+)
ES6(ES2015) 2015 箭头函数(()=>{})、let/const 块级作用域、类(class)、模块(import/export)、解构赋值、模板字符串、Promise、Set/Map 最具里程碑的版本,此后 ES 每年迭代
ES2016 2016 数组 includes 方法、指数运算符(**,如 2**3=8 小版本迭代,仅 2 个核心特性
ES2017 2017 async/await(简化 Promise 异步)、Object.values()/Object.entries()、字符串 padStart/padEnd 异步编程革命,async/await 成为主流
ES2018 2018 异步迭代器(for await...of)、正则表达式增强(命名捕获组、后行断言)、对象展开运算符(... 用于对象) 正则和异步能力升级
ES2019 2019 数组 flat()/flatMap()(数组扁平化)、String.trimStart()/trimEnd()Object.fromEntries() 数据处理便捷化
ES2020 2020 可选链操作符(?.,如 obj?.a?.b 避免报错)、空值合并运算符(??,如 a??b 仅当 a 为 null/undefined 时取 b)、BigInt(超大整数支持)、动态 import() 解决日常开发痛点(空值判断、大数字)
ES2021 2021 数组 at() 方法(支持负索引,如 arr.at(-1) 取最后一个元素)、字符串 replaceAll()、逻辑赋值运算符(&&=/`  语法糖优化,提升开发效率
ES2022+ 2022 - 至今 ES2022:类字段声明(无需在 constructor 中定义)、Top-level await(模块顶层直接用 await);后续版本(ES2023-2025)持续新增小特性(如数组 findFromLasttoReversed 等) 每年小步迭代,聚焦实用性优化

二、关键概念澄清

  1. “JavaScript 版本”≠“ECMAScript 版本”:ECMAScript 是 JS 的 “语法标准”,而 JavaScript 是实际应用的语言(包含 ES 语法 + 浏览器 API/Node.js API)。比如我们说 “用 ES6 开发”,实际是用 ES2015 及后续标准的语法。
  2. 为什么没有 “ES7/ES8” 的说法?ES6(2015)后,TC39(制定 ES 标准的组织)改为 “每年一小版”,版本号统一用 “ES + 年份”(如 ES2016),不再用 ES7、ES8 等编号,避免大版本积累过多特性导致等待周期过长。
  3. 兼容性问题:
    • 老浏览器(如 IE8 及以下)仅支持 ES3/ES5,不支持 ES6+ 特性(如 let/const、箭头函数);
    • 现代浏览器(Chrome、Firefox、Edge、Safari 最新版)和 Node.js 14+ 已支持 95% 以上的 ES2020+ 特性;
    • 开发时若需兼容老环境,可通过 Babel 转译(将 ES6+ 转成 ES5)+ Polyfill(补充老浏览器缺失的 API,如 Promise、Array.prototype.includes)解决。

三、实际开发中的版本选择

  1. 若开发 浏览器端应用:
    • 面向现代浏览器(无需兼容 IE):直接使用 ES2020+ 特性(可选链、async/await 等),无需过度兼容;
    • 需兼容 IE11 等老浏览器:用 Babel 转译 + Polyfill,代码中可写 ES6+ 语法,最终输出 ES5 兼容版。
  2. 若开发 Node.js 应用:
    • Node.js 版本 ≥16:支持绝大多数 ES2022+ 特性,可直接使用;
    • 老 Node.js 版本(如 10-14):需通过 Babel 或 --experimental-modules 标志启用部分特性。

四、如何查看当前环境支持的 ES 版本?

  • 浏览器:在控制台输入 console.log(Intl.DateTimeFormat().resolvedOptions().calendar)(ES2017+ 支持),或用 caniuse.com 查询具体特性支持情况;
  • Node.js:运行 node -v 查看版本,再通过 Node.js 官方文档 查看对应版本支持的 ES 特性。
posted on 2025-11-18 15:57  哈哈哈~_~  阅读(0)  评论(0)    收藏  举报