愛伊米

熬夜整理56個JavaScript高階的手寫知識點!!專業掃盲!

作者:Sunshine_Lin

簡介:「前端之神」的號主江湖人稱林三心,現已有100+篇原創文章,全網粉絲高達1w+,面試過超過100+個前端程式設計師,全網獲贊2w+,全網閱讀量播放量超過60w,更是B站「面試進階成為大佬」系列影片的Up主。喜歡分享Vue,React,Typescript等高階前端知識。

前言

大家好,我是林三心,基礎是進階的前提,前面我給大家分享了本菜鳥這一年來筆記中的50個JS基礎知識點和50個JS高階知識點

工作中遇到的50個JavaScript的基礎知識點,滿分找我拿獎品!

https://juejin。cn/post/7020940475133591566

萬字總結」熬夜總結50個JS的高階知識點,全都會你就是神!

https://juejin。cn/post/7022795467821940773

今天就給大家分享一下我筆記中的

56個JavaScript手寫知識點

註明:此文章不含演算法題

面試常考

1、實現原生的AJAX請求

2、手寫 new 的過程

3、instanceof關鍵字

4、實現防抖函式

5、實現節流函式

6、實現陣列去重

題目描述:實現一個數組的去重

7、用setTimeout實現setInterval

題目描述:setinterval 用來實現迴圈定時呼叫 可能會存在一定的問題 能用 settimeout 解決嗎

8、用setInterval實現setTimeout

題目說明:沒有,就是想刁難你

9、實現一個compose函式

題目說明:實現以下效果

實現如下:

10、實現一個科裡化函式

題目要求:

實現如下:

11、實現一個LRU快取函式

題目說明:

熬夜整理56個JavaScript高階的手寫知識點!!專業掃盲!

實現如下:

12、簡單實現 釋出訂閱模式

題目描述:實現一個釋出訂閱模式擁有 on emit once off 方法

13、實現JSON。parse

題目描述:實現JSON。parse

14、將DOM轉化成樹結構物件

題目描述:

實現如下:

15、將樹結構轉換為DOM

題目描述:

實現如下:

16、判斷一個物件有環引用

題目描述:驗證一個物件有無環引用

實現思路:用一個數組儲存每一個遍歷過的物件,下次找到陣列中存在,則說明環引用

17、計算一個物件的層數

題目描述:給你一個物件,統計一下它的層數

18、物件的扁平化

題目描述:

實現如下:

19、實現(a == 1 && a == 2 && a == 3)為true

題目描述: 實現(a == 1 && a == 2 && a == 3)為true

20、實現限制併發的Promise排程器

題目描述:JS 實現一個帶併發限制的非同步排程器 Scheduler,保證同時執行的任務最多有兩個

實現如下:

21、實現lazyMan函式

題目描述:

實現如下:

22、實現add函式

題目描述:實現一個 add 方法 使計算結果能夠滿足如下預期:

add(1)(2)(3)()=6

add(1,2,3)(4)()=10

23、實現一個合格的深複製

推薦看我這篇:深複製有這5個段位,你只是青銅段位?還想漲薪?

24、實現 Promise

推薦看我這篇:看了就會,手寫Promise原理,最通俗易懂的版本!!!【閱讀:1。3w,點贊:460】

25、實現 async/await

推薦看我這篇:7張圖,20分鐘就能搞定的async/await原理!為什麼要拖那麼久?【閱讀:2。15w,點贊:460】

Array篇

定義一個測試陣列

26、forEach

引數代表含義

item:遍歷項

index:遍歷項的索引

arr:陣列本身

27、map

引數代表含義

item:遍歷項

index:遍歷項的索引

arr:陣列本身

28、filter

引數代表含義

item:遍歷項

index:遍歷項的索引

arr:陣列本身

29、every

引數代表含義

item:遍歷項

index:遍歷項的索引

arr:陣列本身

30、some

引數代表含義

item:遍歷項

index:遍歷項的索引

arr:陣列本身

31、reduce

引數代表含義

pre:前一項

next:下一項

index:當前索引

arr:陣列本身

32、findIndex

引數代表含義

item:遍歷項

index:遍歷項的索引

arr:陣列本身

33、find

引數代表含義

item:遍歷項

index:遍歷項的索引

arr:陣列本身

34、fill

用處:填充陣列

引數代表含義

initValue:填充的值

start:開始填充索引,預設0

end:結束填充索引,預設length

35、includes

用處:查詢元素,查到返回true,反之返回false,可查詢NaN

36、join

用處:將陣列用分隔符拼成字串,分隔符預設為,

37、flat

38、splice

難點

擷取長度和替換長度的比較,不同情況

Object篇

定義一個測試物件

39、entries

用處:將物件轉成鍵值對陣列

40、fromEntries

用處:跟entries相反,將鍵值對陣列轉成物件

41、keys

用處:將物件的key轉成一個數組合集

42、values

用處:將物件的所有值轉成數組合集

43、instanceOf

用處:A instanceOf B,判斷A是否經過B的原型鏈

44、is

用處:Object。is(a, b),判斷a是否等於b

45、Object。assign

難點

assign接收多個物件,並將多個物件合成一個物件

這些物件如果有重名屬性,以後來的物件屬性值為準

assign返回一個物件,這個物件 === 第一個物件

Function篇

46、call

47、apply

難點:

bind是返回一個函式,而不是執行結果

bind返回的函式,拿來當做建構函式,該怎麼處理

String篇

49、slice

引數代表含義

start:開始擷取的字元索引(包含此字元)

end:結束擷取的字元索引(不包含此字元)

注意點

start > end:返回空字串

start < 0:start = 陣列長度 + start

50、substr

引數代表含義

start:開始擷取的字元索引(包含此字元)

length:擷取的長度

注意點

start < 0:start = 陣列長度 + start

length超出所能擷取範圍,需要做處理

length < 0:返回空字串

51、substring

功能與slice大致相同

區別之處

start > end:互換值

Promise篇

52、all

接收一個Promise陣列,陣列中如有非Promise項,則此項當做成功

如果所有Promise都成功,則返回成功結果陣列

如果有一個Promise失敗,則返回這個失敗結果

53、race

接收一個Promise陣列,陣列中如有非Promise項,則此項當做成功

哪個Promise最快得到結果,就返回那個結果,無論成功失敗

54、allSettled

接收一個Promise陣列,陣列中如有非Promise項,則此項當做成功

把每一個Promise的結果,集合成陣列,返回

55、any

any與all相反

接收一個Promise陣列,陣列中如有非Promise項,則此項當做成功

如果有一個Promise成功,則返回這個成功結果

如果所有Promise都失敗,則報錯

56、finally

接收一個回撥函式,但無引數接收

無論成功失敗狀態,都會執行finally

結語

如果你覺得此文對你有一丁點幫助,點個贊,鼓勵一下林三心哈哈。