實現深拷貝

2021-09-24 04:18:39 字數 500 閱讀 8830

通過遞迴+型別判斷

function deepclone(obj)

//如果obj是正規表示式

//instanceof原理 判斷當前元素的__proto__ 是否有regexp.prototype

if(obj instanceof regexp)

//如果obj是日期格式

if(obj instanceof date)

//還可以增加其他的判斷

//如果不是物件型別,比如數字,字串,方法

if(typeof obj !== 'object')

//判斷如果obj是陣列,instance是空陣列

//如果obj是物件,instance是空物件

let instance = new obj.constructor;

//迴圈

for(let key in obj)

}return instance;

}

反射實現深拷貝

源 引用自 做了一些修改,反射的時候直接取字段值,不取屬性值,因為屬性最終是暴漏的字段值。修改後的 支援泛型。源 泛型報錯。public static t deepcopywithreflection t obj copied.setvalue deepcopywithreflection arra...

js實現深拷貝

深拷貝 深拷貝本身只針對較為複雜的object型別資料,但是含義的話比如基本資料型別a和b的賦值操作,賦值之後b有自己的記憶體空間,a,b之間互不影響 淺拷貝 引用資料型別 名存在棧記憶體中,值存在於堆記憶體中,但是棧記憶體會提供乙個引用的位址指向堆記憶體中的值。當b a進行拷貝時,其實複製的是a的...

簡單實現深拷貝

方法一 使用json.stringify和json.parse將引用資料型別轉換為基本資料型別,從而實現深拷貝 function deepclone obj var a 0,1,2,3 4 b deepclone a a 0 1 a 2 0 1 console.log a,b 此時a陣列發生了變化,...