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.padStart 和 String.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
- 本文作者:JSZ
- 本文链接:blog.vampuck.com/2022/02/05/Javascript/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!