方法一:
使用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陣列發生了變化,b沒有變化,從而實現了深拷貝
方法二:
使用jquery的extend方法,需要依賴於jquery
let a=[0,1,[2,3],4],
b=$.extend(true,,a);
a[0]=1;
a[2][0]=1;
console.log(a,b);
方法三:
遞迴封裝的方法
function deepclone(obj);
if(obj && typeof obj==="object")else}}
}return objclone;
}
let a=[1,2,3,4],
b=deepclone(a);
a[0]=2;
console.log(a,b);
方法四:
拷貝的不徹底,b物件的一級屬性確實不受影響了,但是二級屬性還是沒能拷貝成功,仍然脫離不了a的控制,說明slice根本不是真正的深拷貝。
let a=[1,2,3,4],
b=a.slice();
a[0]=2;
console.log(a,b);
let a=[0,1,[2,3],4],
b=a.slice();
a[0]=1;
a[2][0]=1;
console.log(a,b);
淺拷貝和深拷貝的簡單實現
function clone origin,target 如果沒有傳target的話就自動傳乙個空物件進去 for var key in origin return target 淺拷貝有個缺點,就是如果origin或者target的引用值 array object 型別的值改變的話,一定會影響到另...
實現深拷貝
通過遞迴 型別判斷 function deepclone obj 如果obj是正規表示式 instanceof原理 判斷當前元素的 proto 是否有regexp.prototype if obj instanceof regexp 如果obj是日期格式 if obj instanceof date...
反射實現深拷貝
源 引用自 做了一些修改,反射的時候直接取字段值,不取屬性值,因為屬性最終是暴漏的字段值。修改後的 支援泛型。源 泛型報錯。public static t deepcopywithreflection t obj copied.setvalue deepcopywithreflection arra...