這里着總結一部分
- 新增了Array的
flat()
方法和flatMap()
方法 - 新增了String的
trimStart()
方法和trimEnd()
方法 Object.fromEntries()
Symbol.prototype.description
String.prototype.matchAll
Function.prototype.toString()
現在返回精確字符,包括空格和注釋- 簡化
try {} catch {}
,修改catch
綁定 - 新的基本數據類型
BigInt
- globalThis
- import()
- Legacy RegEx
- 私有的實例方法和訪問器
1. 新增了Array的flat()
方法和flatMap()
方法
flat()
和flatMap()
本質上就是是歸納(reduce) 與 合並(concat)的操作。
Array.prototype.flat()
flat()
方法會按照一個可指定的深度遞歸遍歷數組,並將所有元素與遍歷到的子數組中的元素合並為一個新數組返回。
flat()
方法最基本的作用就是數組降維
var arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4] var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]] var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); // [1, 2, 3, 4, 5, 6] //使用 Infinity 作為深度,展開任意深度的嵌套數組 arr3.flat(Infinity); // [1, 2, 3, 4, 5, 6]
- 其次,還可以利用
flat()
方法的特性來去除數組的空項
var arr4 = [1, 2, , 4, 5]; arr4.flat(); // [1, 2, 4, 5]
Array.prototype.flatMap()
flatMap()
方法首先使用映射函數映射每個元素,然后將結果壓縮成一個新數組。它與 map 和 深度值1的 flat 幾乎相同,但 flatMap 通常在合並成一種方法的效率稍微高一些。 這里我們拿map方法與flatMap方法做一個比較。
var arr1 = [1, 2, 3, 4]; arr1.map(x => [x * 2]); // [[2], [4], [6], [8]] arr1.flatMap(x => [x * 2]); // [2, 4, 6, 8] // 只會將 flatMap 中的函數返回的數組 “壓平” 一層 arr1.flatMap(x => [[x * 2]]); // [[2], [4], [6], [8]]
2. 新增了String的trimStart()
方法和trimEnd()
方法
新增的這兩個方法很好理解,分別去除字符串首尾空白字符,這里就不用例子說聲明了。
3. Object.fromEntries()
Object.entries()
方法的作用是返回一個給定對象自身可枚舉屬性的鍵值對數組,其排列與使用 for...in 循環遍歷該對象時返回的順序一致(區別在於 for-in 循環也枚舉原型鏈中的屬性)。
而Object.fromEntries()
則是 Object.entries()
的反轉。
Object.fromEntries()
函數傳入一個鍵值對的列表,並返回一個帶有這些鍵值對的新對象。這個迭代參數應該是一個能夠實現@iterator方法的的對象,返回一個迭代器對象。它生成一個具有兩個元素的類似數組的對象,第一個元素是將用作屬性鍵的值,第二個元素是與該屬性鍵關聯的值。
- 通過 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" }
參考文章:https://juejin.im/post/5ca2e1935188254416288eb2。