盤ES6、ES7、ES8、ES9、ES10

ES6、ES7、ES8、ES9、ES10.png

看最近這麼多人看這個,大致更新下,不太全,詳細的自己可以去查

另外付一下自己大廠面試的簡單記錄,給需要小夥伴
大廠面試記錄

ES6

ES6中的Map 和Object的區別

  • 由於對象只接受字符串作爲鍵名,所以element被自動轉爲字符串[object HTMLDivElement]

  • ES6 提供了 Map 數據結構。它類似於對象,也是鍵值對的集合,但是“鍵”的範圍不限於字符串,各種類型的值(包括對象)都可以當作鍵
    也就是說,Object 結構提供了“字符串—值”的對應
    Map 結構提供了“值—值”的對應,是一種更完善的 Hash 結構實現。

image.png

最常遇到的就是箭頭函數
面試的時候問的最多
箭頭函數和this 指向

https://es6.ruanyifeng.com/
https://www.cnblogs.com/theblogs/p/10575845.html

ES6 兼容問題

ES7

ES7在ES6的基礎上添加三項內容:求冪運算符(**)、Array.prototype.includes()方法、函數作用域中嚴格模式的變更。
冪運算:

 

3**2 // 9

includes:

 

[1, 2, 3].indexOf(3) > -1 // true
等同於:
[1, 2, 3].includes(3) // true

兩者這都是通過===進行數據處理,但是對NaN數值的處理行爲不同。includes對NaN的處理不會遵循嚴格模式去處理,所以返回true。indexOf會按照嚴格模式去處理,返回-1。

 

[1, 2, NaN].includes(NaN)     // true
[1, 2, NaN].indexOf(NaN)  // -1

如果僅僅查找數據是否在數組中,建議使用includes,如果是查找數據的索引位置,建議使用indexOf更好一些

ES8

async、await異步解決方案

在ES6中爲了解決回調的書寫方式,引入了Promise的then函數,業務邏輯很多的時候,需要鏈式多個then函數,語義會變得很不清楚。

 

new Promise((resolve, reject) => {this.login(resolve)})
.then(() => this.getInfo())
.then(() => {// do something})
.catch(() => { console.log("Error") })

ES8中把async和await變得更加方便,它其實就是Generator的語法糖。async/await是寫異步代碼的新方式,以前的方法有回調函數和Promise。相比於Promise,它更加簡潔,並且處理錯誤、條件語句、獲取中間值都更加方便。
ruanyifeng async

Object.entries():

該方法會將某個對象的可枚舉屬性與值按照二維數組的方式返回。(如果目標對象是數組,則會將數組的下標作爲鍵值返回)

Object.values():

它的工作原理和Object.entries()方法很像,但是它只返回鍵值對中的值,結果是一維數組

 

Object.values({one: 1, two: 2})    // [1, 2]
Object.values({3: 'a', 1: 'b', 2: 'c'}) // ['b', 'c', 'a'] 
Object.extries([1, 3])     //[1, 3]

字符串填充padStart()、padEnd():

ES8提供了新的字符串填充方法,該方法可以使得字符串達到固定長度。它有兩個參數,字符串目標長度和填充內容。

 

'react'.padStart(10, 'm')      //'mmmmmreact'
'react'.padEnd(10, 'm')       //' reactmmmmm'
'react'.padStart(3, 'm')    // "react"

ES10

Array的flat()方法和flatMap()

flat() 方法會按照一個可指定的深度遞歸遍歷數組,並將所有元素與遍歷到的子數組中的元素合併爲一個新數組返回

  • flat()方法最基本的作用就是數組降維;
  • 還可以利用flat()方法的特性來去除數組的空項

扁平化多維數組:

image.png

image.png

 

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]

//去除空項
var arr4 = [1, 2, , 4, 5];
arr4.flat();
// [1, 2, 4, 5]

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]]

String的trimStart()方法和trimEnd()方法
Object.fromEntries()
Symbol.prototype.description
String.prototype.matchAll
Function.prototype.toString()現在返回精確字符,包括空格和註釋
簡化try {} catch {},修改 catch 綁定
新的基本數據類型BigInt
globalThis
import()
Legacy RegEx
私有的實例方法和訪問器

 

掃碼體驗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章