ECMAScript版本

新增特性

ECMAScript2016(ES7)

数据include, Math.pow

ECMAScript2017(ES8)

异步操作、Object String 能力进一步增强,让代码编写更加效率

ECMAScript2018(ES9)

遍历中的异步,异步归一操作等问题,提供了对象的拷贝和筛选功能,增强了正则

ECMAScript2019(ES10)

JSON问题修复,数组、字符串、对象、函数能力增强,BigInt

ES7

Array.prototype.includes
  1. 方法返回一个布尔值,表示某个数组是否包含给定的值
  2. 第二个参数表示搜索的起始位置,默认为0。如果第二个参数为负数,则表示倒数的位置
  3. indexOf 缺点是不够语义化和直观,内部使用===判断,导致[NaN].indexOf(NaN)
    情况的误判
新增了一个指数运算符(**)
// 这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的。
// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512

ES8

async/await
  1. 防止出错的方法,也是将其放在try...catch代码块之中。
Object.values Object.entries
  1. 引入了跟Object.keys配套的Object.valuesObject.entries,作为遍历一个对象的补充手段,供for...of循环使用。
for (let [k, v] of Object.entries(obj)){}
padStart() padEnd()
  1. 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全
结尾允许逗号

多人开发场景,就不会因为逗号而产生该行修改

sharedArrayBuffer Atomics
  1. SharedArrayBuffer,允许 Worker 线程与主线程共享同一块内存。SharedArrayBuffer的 API 与ArrayBuffer一模一样,唯一的区别是后者无法共享数据。
  2. SharedArrayBuffer API 提供Atomics对象,保证所有共享内存的操作都是“原子性”的,并且可以在所有线程内同步。

ES9

asyncIterator 异步遍历器
  1. 异步遍历器的最大的语法特点,就是调用遍历器的next方法,返回的是一个 Promise 对象。
asyncIterator
  .next()
  .then(
    ({ value, done }) => /* ... */
  );
  1. for await...of 用于遍历异步的Iterator 接口
reset/spread 可用于对象(浅拷贝)
正则表达式 replace 反向断言

ES10

Array.prototype.flat() Array.prototype.map()
  1. flat()默认只会“拉平”一层,flat()的参数为2,表示要“拉平”两层的嵌套数组,如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数
  2. flatMap()方法对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()),然后对返回值组成的数组执行flat()方法。flatMap()只能展开一层数组。
sort 排序稳定
catch参数省略
BigInt
  1. 这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。
  2. undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)Symbol BigInt