JavaScript 从 ES6 到今天
ES6 几乎等同于“现代 JavaScript”,这毋庸置疑。2015 年,ES6 作为 JavaScript 的第二次重大更新(第一次是 2009 年的 ES5)发布,新增了一系列功能,彻底改变了 JS 开发。但时间并没有止步于 2015 年,ECMA International 的各位好心人每年都会发布一个新版本——没错,2021 年我们正式发布了ES12!
如果您错过了 7-11 版本的备忘录,您并不孤单。得益于 Babel、Webpack 和 TypeScript 等工具将我们的代码转换为浏览器可用的版本,我们实际上不需要太关注 ES 版本。但您可能会惊讶地发现,有多少语言特性比您想象的要新(或要旧)……
ES6 / ECMAScript 2015
变量
letconst- 块级作用域
- 数组解构
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 }) => {} - 生成器
课程
classgetsetstaticextendsinstanceof
模块
importexportdefault
正则表达式
/y(黏)/u(unicode).flags.source
字符串
- 模板字面量
.includes().startsWith().endsWith().repeat()
新的全局对象/方法
MapSetWeakMapPromiseSymbolRegExpObject.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.descriptionObject.fromEntries()- 字符串方法
.trimStart()和.trimEnd() - 数组方法
.flatMap()和.flat()
ES11 / ECMAScript 2020
- Bigint 数据类型
- 对象的可选链接
myObject?.details?.name - 空值合并运算符
a ?? b String.prototype.matchAll()- 通过动态导入
import() Promise.allSettled()globalThisimport.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