通過遞迴+型別判斷
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陣列發生了變化,...