文末有其他篇链接
Es10
1、对象方法扩展
Object.fromEntries()
Object.fromEntries() 方法接收一个键值对的列表参数,并返回一个带有这些键值对的新对象。这个迭代参数应该是一个能够实现@@iterator方法的的对象,返回一个迭代器对象。它生成一个具有两个元素的类数组的对象,第一个元素是将用作属性键的值,第二个元素是与该属性键关联的值。
Object.fromEntries() 执行与 Object.entries 互逆的操作。
通过 Object.fromEntries, 可以将 Map 转换为 Object:
const map = new Map([ ['foo', 'bar'], ['baz', 42] ]);
const obj = Object.fromEntries(map);
console.log(obj); // { foo: "bar", baz: 42 }
通过 Object.fromEntries, 可以将 Array 转换为 Object:
const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ];
const obj = Object.fromEntries(arr);
console.log(obj); // { 0: "a", 1: "b", 2: "c" }
2、字符串方法扩展
String.prototype.trimStart()
trimStart() 方法从字符串的开头删除空格。trimLeft() 是此方法的别名。返回一个新字符串,表示从其开头(左端)除去空格的调用字符串。
var str = " foo ";
console.log(str.length); // 8
str = str.trimStart() // 等同于 str = str.trimLeft();
console.log(str.length); // 5
console.log(str); // "foo "
String.prototype.trimEnd()
trimEnd() 方法从一个字符串的末端移除空白字符。trimRight() 是这个方法的别名。返回一个新字符串,表示从调用字串的末(右)端除去空白。
var str = " foo ";
alert(str.length); // 8
str = str.trimRight(); // 或写成str = str.trimEnd();
console.log(str.length); // 6
console.log(str); // ' foo'
3、数组方法扩展
Array.prototype.flat()
flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
语法:var newArray = arr.flat([depth]) (depth指定要提取嵌套数组的结构深度,默认值为 1。)
const arr1 = [0, 1, 2, [3, 4]];
console.log(arr1.flat());
// output: [0, 1, 2, 3, 4]
const arr2 = [0, 1, 2, [[[3, 4]]]];
console.log(arr2.flat(2));
// output: [0, 1, 2, [3, 4]]
Array.prototype.flatMap()
flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 连着深度值为1的 flat 几乎相同,但 flatMap 通常在合并成一种方法的效率稍微高一些。
flatMap 方法与 map 方法和深度depth为1的 flat 几乎相同.
var arr1 = [1, 2, 3, 4];
arr1.map(x => [x * 2]);
// [[2], [4], [6], [8]]
arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]
// only one level is flattened
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]
4、Symbol属性扩展
Symbol.prototype.description
description 是一个只读属性,它会返回 Symbol 对象的可选描述的字符串。
console.log(Symbol('desc').description);
// output: "desc"
console.log(Symbol.iterator.description);
// output: "Symbol.iterator"
console.log(Symbol.for('foo').description);
// output: "foo"
console.log(`${
Symbol('foo').description}bar`);
// output: "foobar"