J

JavaScript 从 ES6 到今天

2025-06-07

JavaScript 从 ES6 到今天

ES6 几乎等同于“现代 JavaScript”,这毋庸置疑。2015 年,ES6 作为 JavaScript 的第二次重大更新(第一次是 2009 年的 ES5)发布,新增了一系列功能,彻底改变了 JS 开发。但时间并没有止步于 2015 年,ECMA International 的各位好心人每年都会发布一个新版本——没错,2021 年我们正式发布了ES12

如果您错过了 7-11 版本的备忘录,您并不孤单。得益于 Babel、Webpack 和 TypeScript 等工具将我们的代码转换为浏览器可用的版本,我们实际上不需要太关注 ES 版本。但您可能会惊讶地发现,有多少语言特性比您想象的要新(或要旧)……

ES6 / ECMAScript 2015

变量

  • let
  • const
  • 块级作用域
  • 数组解构let [ a, b ] = sourceArray
  • 对象解构let { a, b } = sourceObject

对象字面量

  • 属性简写let obj = { a, b }
  • 计算属性键let obj = { [a]: "a" }
  • 方法定义let obj = { myMethod(a) { return a } }; obj.myMethod("a");
  • for...of循环

数组

  • 扩展运算符[a, b, ...anotherArray]
  • .copyWithin()
  • .entries()
  • .fill()
  • .find()
  • .findIndex()
  • .keys()
  • .values()

功能

  • 箭头声明() => {}
  • 默认参数(a, b = true) => {}
  • 剩余参数(a, b, ...rest) => {}
  • 解构参数({ a, b }) => {}
  • 生成器

课程

  • class
  • get
  • set
  • static
  • extends
  • instanceof

模块

  • import
  • export
  • default

正则表达式

  • /y(黏)
  • /u(unicode)
  • .flags
  • .source

字符串

  • 模板字面量
  • .includes()
  • .startsWith()
  • .endsWith()
  • .repeat()

新的全局对象/方法

  • Map
  • Set
  • WeakMap
  • Promise
  • Symbol
  • RegExp
  • Object
    • .assign()
    • .entries()
  • Array
    • .from()
    • .of()
  • Number
    • .EPSILON
    • .MIN_SAFE_INTEGER
    • .MAX_SAFE_INTEGER
    • .isInteger()
    • .isSafeInteger()
    • .isFinite()
    • .parseFloat()
    • .parseInt()
    • .isNaN()
  • Math
    • .cbrt()
    • .log10()
    • .log2()
    • .sign()
    • .trunc()
    • .hypot()

这就是ES6 中发布的所有内容。内容非常丰富。但如果您觉得列表中缺少了什么,请继续阅读。还有 6 年的功能要发布!

有趣的事实:ES6 现在已完全被浏览器支持,因此不再需要进行转译,除非你不幸地支持 Internet Explorer(我表示同情)

ES7 / ECMAScript 2016

  • 指数运算3 ** 4
  • Array.includes()

ES8 / ECMAScript 2017

  • 异步函数async/await
  • 对象解构剩余赋值let { a, b, ...c } = sourceObject
  • 对象扩展属性{ a: 'a', b: 'b', ...anotherObject }
  • Object
    • .entries()
    • .getOwnPropertyDescriptors()
    • .values()
  • String原型
    • .padStart()
    • .padEnd()
  • 函数参数中的尾随逗号
  • 共享内存和原子

ES9 / ECMAScript 2018

  • 异步迭代for-await-of
  • 对象字面量的 Rest 和 Spread
  • Promise.prototype.finally()
  • 标记模板字面量
  • 正则表达式
    • 命名捕获组
    • 更好的逃脱
    • 后视断言

ES10 / ECMAScript 2019

  • 可选的 catch 绑定
  • Symbol.prototype.description
  • Object.fromEntries()
  • 字符串方法.trimStart().trimEnd()
  • 数组方法.flatMap().flat()

ES11 / ECMAScript 2020

  • Bigint 数据类型
  • 对象的可选链接myObject?.details?.name
  • 空值合并运算符a ?? b
  • String.prototype.matchAll()
  • 通过动态导入import()
  • Promise.allSettled()
  • globalThis
  • import.meta
  • 命名空间重新导出:export \* as ns from "mod"

ES12 / ECMAScript 2021

  • String.prototype.replaceAll()
  • Promise.any()
  • WeakRefs
  • 逻辑赋值运算符
  • 下划线作为分隔numberbigint

JS 的下一步是什么?

JavaScript 每年的更新速度似乎不会很快放缓。ES13 已在筹备中,预计将于 2022 年发布,新增功能列表仍在不断增加,例如.at()数组、Object.hasOwn()。如果您想保持领先地位,可以关注GitHub 上语言新增功能提案的进展。有些功能将于明年发布,但更多功能需要关注后续版本(我个人希望管道运算符能尽快推出)。

但在那之前,请在评论区留言,说出你惊讶的 JS 功能,它们可能是比你想象的更老,也可能是更新,或者你从未听说过!除非你是 ECMA International 的工作人员,否则我敢打赌肯定有不少 😄。

文章来源:https://dev.to/justmyrealname/javascript-from-es6-to-today-c42
PREV
7 种可以使用 HTML 代替 CSS 的情况
NEXT
介绍 Vue Formulate — 真正令人愉悦的表单创作。