js面試技巧之手寫乙個深拷貝

2021-10-05 12:42:43 字數 847 閱讀 3178

手寫乙個深拷貝,雖然這個題並不難,但是我們也要明白它所要考察的知識點:

1、淺拷貝和深拷貝的區別

2、數值型別和引用型別在記憶體中的儲存方式

3、typeof能對哪些資料型別進行判斷

4、instanceof 的用法

5、hasownproperty的用法

6、遞迴函式的用法

**如下:

// 給copysouce乙個預設的物件引數,防止報錯

function

deepcopy

(copysource=

)// 如果要複製的引數是 'object',宣告變數result用於接收拷貝完畢的引數

let result;

if(copysource instanceof

array

)else

}// 對引用型別的copysource進行遍歷key,資料遍歷出來的key是索引,物件遍歷出來的key是屬性名

for(

let key in copysource)

}// 當結束迴圈後,把當前result返回,當呼叫deepcopy()並傳參時才能得到拷貝完畢的資料

return result

}// 呼叫

const a =

10// a是乙個數值型別,所以直接返回變數a的資料給b

const b =

deepcopy

(a)let o1 =

, project:

['語文'

,'數學'

,'英語']}

let o2 =

deepcopy

(o1)

實現乙個深拷貝

第一種 可以使用簡單的方法jsonconst person const copyperson json.parse json.stringify person 修改person內name屬性 person.name che console.log person console.log copyper...

js如何手寫乙個new

function dog name dog.prototype.sayname function var dog new dog 小狗 dog.sayname 結果為小狗 function dog name dog.prototype.sayname function 上面是本身dog functi...

如何深拷貝乙個物件陣列?

某個專案裡,存在乙個物件陣列,我用lodash的filter 函式,分別生成了 a b 兩個新的物件陣列,但我遍歷了 b 陣列,改造裡面的每乙個物件,沒想到引起 a 陣列的裡物件發生了變化,引發了錯誤。這是乙個基礎的,對引用型別 物件沒有使用深拷貝的問題,我疏忽了,特此記錄下。const requi...