ECMAScript 新特性

1 ES7 新特性

1

Array.prototype.includes

快速查找数组中是否包含某个元素
包括NaN(所以和indexOf不一样)
eg.
let arr = [1, 2, 3, NaN];

arr.includes(NaN)
true

arr.indexOf(NaN) != -1
false

2

指数函数的中缀表示法

//用法一:x ** y

let squared = 2 ** 2;//等同于: 2 * 2
let cubed = 2 ** 3;//等同于: 2 * 2 * 2


//用法二为语法糖:x **= y

let a = 2;
a **= 2;//等同于: a = a * a;

let b = 3;
b **= 3;//等同于: b = b * b * b;

2 ES8 新特性

1

Object.values(obj),obj 可以是一个对象或者数组。
tip: 当把数字当做对象的键的时候,返回的数组以键的值升序排序
Object.entries方法返回一个给定对象可枚举属性值的数组[key, value]

2

String.prototype.padStartString.prototype.padEnd,允许将空字符串或其他字符串添加到原始字符串的开头或结尾
String.padStart(targetLength,[padString])
targetLength:当前字符串需要填充到的目标长度

3

结尾允许逗号: git review代码及重新排列项目更简单不必增删逗号。

3 ES9 新特性

1

引入异步迭代器,await可以和for…of循环一起使用,以串行的方式运行异步操作。

2

Promise.prototype.finally() : 无论Promise运行成功还是失败,运行相同的代码

3 rest/spread

三个点…在ES6中已经引入,但作用对象仅限于数组。在ES9中,也为对象一样的rest参数和扩展运算符

4 ES10 新特性

1

Function.prototype.toString 现在返回精确字符,包括空格和注释

2

Object.fromEntries
该特性可为对象添加一个新的静态方法 Object.fromEntries, 将符合键值对的列表(例如 Map、数组等)转换为一个对象。
eg:

const map = new Map().set("foo", true).set("bar", false);
let obj = Object.fromEntries(map);  

4 ES10 新特性

1

Array.prototype.flat
数组的所有项以指定的维度降维(扁平化),然后组成新数组返回。
支持多维数组的扁平化,其中Infinity可以将多维数组压扁成一维数组
eg:

let r;
r = ["1", ["8", ["9", ["1"]]]].flat();//4维数组,默认降维1,变成3维数组
console.log(r); //>> [ '1', '8', [ '9', ['1'] ] ]

r = ["1", ["8", ["9", ["1"]]]].flat(2); //4维数组,降维2,变成2维数组
console.log(r); //>> [ '1', '8', '9', ['1'] ]

r = ["1", ["8", ["9", ["1"]]]].flat(Infinity);//4维数组,最多变成1维数组
console.log(r); //>> [ '1', '8', '9', '1' ]

2

Array.prototype.flatMap
执行完 map() 后再执行一次 flat() 方法.
eg:

let r;
r = ["I love", "coffe 1891"].map(item => item.split(" "));
console.log(r); //>> [ [ 'I', 'love' ], [ 'coffe', '1891' ] ]

r = ["I love", "coffe 1891"].flatMap(item => item.split(" "));
console.log(r); //>>[ 'I', 'love', 'coffe', '1891' ]

5 ES11 新特性

1 import() 动态引入模块

一个类函数(function-like)的import()功能,可以像函数传参那样传入参数实现动态引用module

查看评论