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
- 逻辑赋值运算符
- 下划线作为分隔
number
符bigint
JS 的下一步是什么?
JavaScript 每年的更新速度似乎不会很快放缓。ES13 已在筹备中,预计将于 2022 年发布,新增功能列表仍在不断增加,例如.at()
数组、Object.hasOwn()
。如果您想保持领先地位,可以关注GitHub 上语言新增功能提案的进展。有些功能将于明年发布,但更多功能需要关注后续版本(我个人希望管道运算符能尽快推出)。
但在那之前,请在评论区留言,说出你惊讶的 JS 功能,它们可能是比你想象的更老,也可能是更新,或者你从未听说过!除非你是 ECMA International 的工作人员,否则我敢打赌肯定有不少 😄。
文章来源:https://dev.to/justmyrealname/javascript-from-es6-to-today-c42