js 淺拷貝 深拷貝實現梳理

2021-09-07 03:10:22 字數 563 閱讀 3242

淺拷貝

1. object.create(object.getprototypeof(prev), object.getownpropertydescriptors(prev)) (最完美)

2. object.assign({}, prev) (無法拷貝enumerable=false的屬性;無法拷貝原型鏈)

3. 使用for in遍歷prev,對新物件進行賦值(無法拷貝enumerable=false的屬性;可以遍歷原型鏈,但原型鏈結構不再存在且自身和原型鏈相同的屬性只會保留乙個)

4. 使用object.keys、values、entries遍歷prev,對新物件進行賦值(無法拷貝enumerable=false的屬性;無法拷貝原型鏈);

使用object.getownpropertynames遍歷prev,對新物件進行賦值(可以拷貝enumerable=false的屬性;無法拷貝原型鏈)

5. 借助工具庫,如lodash、underscore、jquery等(_.clone...)

深拷貝1. 遞迴逐層淺拷貝

2. json.parse(json.stringify(obj))

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,淺拷貝 拷貝一層物件。深...