天天看點

盤ES6、ES7、ES8、ES9、ES10

盤ES6、ES7、ES8、ES9、ES10

ES6、ES7、ES8、ES9、ES10.png

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

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

大廠面試記錄

ES6

ES6中的Map 和Object的差別

  • 由于

    對象隻接受字元串作為鍵名

    ,是以element被自動轉為字元串[object HTMLDivElement]
  • ES6 提供了 Map 資料結構。它類似于對象,也是鍵值對的集合,

    但是“鍵”的範圍不限于字元串,各種類型的值(包括對象)都可以當作鍵

    也就是說,

    Object 結構提供了“字元串—值”的對應

    Map 結構提供了“值—值”的對應

    ,是一種更完善的 Hash 結構實作。
盤ES6、ES7、ES8、ES9、ES10

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()方法的特性來去除數組的空項

扁平化多元數組:

盤ES6、ES7、ES8、ES9、ES10

image.png

盤ES6、ES7、ES8、ES9、ES10

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

私有的執行個體方法和通路器

掃碼體驗

盤ES6、ES7、ES8、ES9、ES10