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...