筆記 JS實現 深拷貝 淺拷貝

2021-10-02 01:43:59 字數 1146 閱讀 4955

1、淺拷貝 object.assign(target, source1, source2)

var initobj = 

}var tempobj = {};

object.assign(tempobj, initobj);

tempobj.age = 20;

console.log(initobj);//

console.log(tempobj);//

2、淺拷貝json.parse(json.stringify())

弊端:只能用在單純只有資料的物件。正確處理的物件只有 number, string, boolean, array, 扁平物件,即那些能夠被 json 直接表示的資料結構。regexp物件是無法通過這種方式深拷貝。也就是說,只有可以轉成json格式的物件才可以這樣用,像function,undefined,symbol 沒辦法正常實現拷貝

var initobj = 

}var tempobj = json.parse(json.stringify(initobj));

tempobj.age = 35;

console.log(initobj);//

console.log(tempobj);//

3.深拷貝,封裝乙個遞迴函式

//遞迴函式

function deepcopy(data)

//解釋:不是物件(即是乙個單獨的數字、字串、undefined、function)又或者是單獨乙個null,則直接返回該值

var newdata = data instanceof array ? : {};

for (var key in data)

return newdata;

}//例項

var initobj =

}var tempobj = deepcopy(initobj);

tempobj.age = 35;

console.log(initobj);//

console.log(tempobj);//

js淺拷貝深拷貝

js淺拷貝深拷貝 對於想要複製的物件,如果物件裡面對應的值都是基本資料型別的,可以直接複製 也就是通過淺拷貝複製。如果對應的值有物件那麼淺拷貝是行不通的。會造成資料汙染。下面介紹淺拷貝與深拷貝實現方法。1.淺拷貝 let tem let copy for let key in tem 2.通過obj...

淺拷貝,深拷貝 js

堆和棧 基本型別 存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配。6種基本資料型別 undefined null boolean number和string,es6新增屬性symbol.他們是直接按值存放的,所以可以直接訪問。引用型別 存放在堆記憶體中的物件,變數實際儲存的是乙個指標,...

JS淺拷貝 深拷貝

1,前景提要 1 數字在被複製後,再修改時,不會改變原值 var a 5 var b a b 7 console.log a a不變 2 物件在被複製後,再修改時,會改變原值 var a var b a b.name hi console.log a a.name hi 2,淺拷貝 拷貝一層物件。深...