js物件淺拷貝和深拷貝

2021-08-18 10:05:11 字數 1184 閱讀 7357

1、淺拷貝

varobj = ; 

//定義乙個物件

functioncopy(obj);

//定義乙個空物件,用來儲存key和value

for(varkeyinobj)

returnnewobj;

//將新物件作為返回值,返回到外面

}varobj2 = copy(obj);

//將obj複製給obj2

obj2.a = 20

; //改變obj2中的a的值為20

console.log(obj.a);

//obj中a的值不變 10

但是這裡存在乙個問題,如果a的值是乙個物件,例如:var obj = };

在使用for in 遍歷時,新物件會同時指向a的記憶體位址,導致修改新物件的值會對原物件有影響;

遇到這種情況時,我們需要深拷貝。

2、深拷貝

varobj = }

;//定義乙個物件

functiondeepcopy

(obj)

varnewobj = {}

; //否則定義乙個空物件,用來儲存key和value

for(

varattr

inobj)

returnnewobj

;//將新物件作為返回值,返回到外面

}varobj2 =

deepcopy

(obj)

;//將obj複製給obj2

obj2.a.

b = 20;

//改變obj2中的屬性a中b的值為20

console.log

(obj.a.b);

//obj中屬性a中b的值不變 10

js 物件深拷貝 深拷貝與淺拷貝

前言 最近在複習一些面試的知識點,剛剛好複習到了這一部分,於是就寫下這篇文章記錄一下。一 值型別和引用型別 在學習深拷貝和淺拷貝之前,我們先來了解一下js的變數型別。值型別 vs 引用型別 值型別 值型別主要有 number,string,boolean,symbol,null,undefined ...

js物件之淺拷貝和深拷貝

淺拷貝依次遍歷內容,依次賦值 var p var k console.log p console.log k for let key in p console.log p console.log k 使用object.assign 方法,這個方法的作用 問題來,你這樣依次拷貝出現的問題就是物件裡面含...

js物件的深拷貝和淺拷貝

淺拷貝 只是複製指向某個物件的指標,而不複製物件本身新舊物件,它們還是共享同一記憶體。深拷貝 會另選創造乙個一模一樣的物件,新物件和原物件不共享記憶體,修改新物件不會改到原物件。也就是老死不相往來了。知道了深淺拷貝的含義,那就來總結如何實現深淺拷貝。let data 第一種情況 let obj da...