ECMAScript版本 | 新增特性 |
ECMAScript2016(ES7) | 数据include, Math.pow |
ECMAScript2017(ES8) | 异步操作、Object String 能力进一步增强,让代码编写更加效率 |
ECMAScript2018(ES9) | 遍历中的异步,异步归一操作等问题,提供了对象的拷贝和筛选功能,增强了正则 |
ECMAScript2019(ES10) | JSON问题修复,数组、字符串、对象、函数能力增强,BigInt |
ES7
Array.prototype.includes
- 方法返回一个布尔值,表示某个数组是否包含给定的值
- 第二个参数表示搜索的起始位置,默认为0。如果第二个参数为负数,则表示倒数的位置
- indexOf 缺点是不够语义化和直观,内部使用===判断,导致[NaN].indexOf(NaN)
情况的误判
新增了一个指数运算符(**)
// 这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的。
// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512
ES8
async/await
- 防止出错的方法,也是将其放在
try...catch
代码块之中。
Object.values Object.entries
- 引入了跟
Object.keys
配套的Object.values
和Object.entries
,作为遍历一个对象的补充手段,供for...of
循环使用。
for (let [k, v] of Object.entries(obj)){}
padStart() padEnd()
- 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。
padStart()
用于头部补全,padEnd()
用于尾部补全
结尾允许逗号
多人开发场景,就不会因为逗号而产生该行修改
sharedArrayBuffer Atomics
- SharedArrayBuffer,允许 Worker 线程与主线程共享同一块内存。SharedArrayBuffer的 API 与ArrayBuffer一模一样,唯一的区别是后者无法共享数据。
- SharedArrayBuffer API 提供Atomics对象,保证所有共享内存的操作都是“原子性”的,并且可以在所有线程内同步。
ES9
asyncIterator 异步遍历器
- 异步遍历器的最大的语法特点,就是调用遍历器的next方法,返回的是一个 Promise 对象。
asyncIterator
.next()
.then(
({ value, done }) => /* ... */
);
-
for await...of
用于遍历异步的Iterator 接口
reset/spread 可用于对象(浅拷贝)
正则表达式 replace 反向断言
ES10
Array.prototype.flat() Array.prototype.map()
- flat()默认只会“拉平”一层,flat()的参数为2,表示要“拉平”两层的嵌套数组,如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数
- flatMap()方法对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()),然后对返回值组成的数组执行flat()方法。flatMap()只能展开一层数组。
sort 排序稳定
catch参数省略
BigInt
- 这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。
- undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)Symbol BigInt