看最近這么多人看這個(gè)郎哭,大致更新下,不太全菇存,詳細(xì)的自己可以去查
另外付一下自己大廠(chǎng)面試的簡(jiǎn)單記錄夸研,給需要小伙伴
大廠(chǎng)面試記錄
ES6
ES6中的Map 和Object的區(qū)別
由于
對(duì)象只接受字符串作為鍵名
,所以element被自動(dòng)轉(zhuǎn)為字符串[object HTMLDivElement]ES6 提供了 Map 數(shù)據(jù)結(jié)構(gòu)依鸥。它類(lèi)似于對(duì)象亥至,也是鍵值對(duì)的集合,
但是“鍵”的范圍不限于字符串贱迟,各種類(lèi)型的值(包括對(duì)象)都可以當(dāng)作鍵
姐扮。
也就是說(shuō),Object 結(jié)構(gòu)提供了“字符串—值”的對(duì)應(yīng)
衣吠,
Map 結(jié)構(gòu)提供了“值—值”的對(duì)應(yīng)
茶敏,是一種更完善的 Hash 結(jié)構(gòu)實(shí)現(xiàn)。
最常遇到的就是箭頭函數(shù)
面試的時(shí)候問(wèn)的最多
箭頭函數(shù)和this 指向
https://es6.ruanyifeng.com/
https://www.cnblogs.com/theblogs/p/10575845.html
ES7
ES7在ES6的基礎(chǔ)上添加三項(xiàng)內(nèi)容:求冪運(yùn)算符(**)缚俏、Array.prototype.includes()方法睡榆、函數(shù)作用域中嚴(yán)格模式的變更。
冪運(yùn)算:
3**2 // 9
includes:
[1, 2, 3].indexOf(3) > -1 // true
等同于:
[1, 2, 3].includes(3) // true
兩者這都是通過(guò)===進(jìn)行數(shù)據(jù)處理袍榆,但是對(duì)NaN數(shù)值的處理行為不同。includes對(duì)NaN的處理不會(huì)遵循嚴(yán)格模式去處理塘揣,所以返回true包雀。indexOf會(huì)按照嚴(yán)格模式去處理,返回-1亲铡。
[1, 2, NaN].includes(NaN) // true
[1, 2, NaN].indexOf(NaN) // -1
如果僅僅查找數(shù)據(jù)是否在數(shù)組中才写,建議使用includes葡兑,如果是查找數(shù)據(jù)的索引位置,建議使用indexOf更好一些
ES8
async赞草、await異步解決方案
在ES6中為了解決回調(diào)的書(shū)寫(xiě)方式讹堤,引入了Promise的then函數(shù),業(yè)務(wù)邏輯很多的時(shí)候厨疙,需要鏈?zhǔn)蕉鄠€(gè)then函數(shù)洲守,語(yǔ)義會(huì)變得很不清楚。
new Promise((resolve, reject) => {this.login(resolve)})
.then(() => this.getInfo())
.then(() => {// do something})
.catch(() => { console.log("Error") })
ES8中把a(bǔ)sync和await變得更加方便沾凄,它其實(shí)就是Generator的語(yǔ)法糖梗醇。async/await是寫(xiě)異步代碼的新方式,以前的方法有回調(diào)函數(shù)和Promise撒蟀。相比于Promise叙谨,它更加簡(jiǎn)潔,并且處理錯(cuò)誤保屯、條件語(yǔ)句手负、獲取中間值都更加方便。
ruanyifeng async
Object.entries():
該方法會(huì)將某個(gè)對(duì)象的可枚舉屬性與值按照二維數(shù)組的方式返回姑尺。(如果目標(biāo)對(duì)象是數(shù)組竟终,則會(huì)將數(shù)組的下標(biāo)作為鍵值返回)
Object.values():
它的工作原理和Object.entries()方法很像,但是它只返回鍵值對(duì)中的值股缸,結(jié)果是一維數(shù)組
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提供了新的字符串填充方法,該方法可以使得字符串達(dá)到固定長(zhǎng)度敦姻。它有兩個(gè)參數(shù)瘾境,字符串目標(biāo)長(zhǎng)度和填充內(nèi)容。
'react'.padStart(10, 'm') //'mmmmmreact'
'react'.padEnd(10, 'm') //' reactmmmmm'
'react'.padStart(3, 'm') // "react"
ES10
Array的flat()方法和flatMap()
flat() 方法會(huì)按照一個(gè)可指定的深度遞歸遍歷數(shù)組镰惦,并將所有元素與遍歷到的子數(shù)組中的元素合并為一個(gè)新數(shù)組返回
- flat()方法最基本的作用就是數(shù)組降維;
- 還可以利用flat()方法的特性來(lái)去除數(shù)組的空項(xiàng)
扁平化多維數(shù)組:
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
//使用 Infinity 作為深度迷守,展開(kāi)任意深度的嵌套數(shù)組
arr3.flat(Infinity);
// [1, 2, 3, 4, 5, 6]
//去除空項(xiàng)
var arr4 = [1, 2, , 4, 5];
arr4.flat();
// [1, 2, 4, 5]
flatMap() 方法首先使用映射函數(shù)映射每個(gè)元素,
然后將結(jié)果壓縮成一個(gè)新數(shù)組旺入。
它與 map 和 深度值1的 flat 幾乎相同兑凿,但 flatMap 通常在合并成一種方法的效率稍微高一些。 這里我們拿map方法與flatMap方法做一個(gè)比較
var arr1 = [1, 2, 3, 4];
arr1.map(x => [x * 2]);
// [[2], [4], [6], [8]]
arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]
// 只會(huì)將 flatMap 中的函數(shù)返回的數(shù)組 “壓平” 一層
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]
String的trimStart()方法和trimEnd()方法
Object.fromEntries()
Symbol.prototype.description
String.prototype.matchAll
Function.prototype.toString()現(xiàn)在返回精確字符茵瘾,包括空格和注釋
簡(jiǎn)化try {} catch {},修改 catch 綁定
新的基本數(shù)據(jù)類(lèi)型BigInt
globalThis
import()
Legacy RegEx
私有的實(shí)例方法和訪(fǎng)問(wèn)器