1. 使用遞歸的方式實現深拷貝
1 function deepClone(obj){ 2 let objClone = Array.isArray(obj) ? [] : {}; 3 if (obj && typeof obj === 'object') { 4 for(let key in obj){ 5 if (obj[key] && typeof obj[key] === 'object'){ 6 objClone[key] = deepClone(obj[key]); 7 }else{ 8 objClone[key] = obj[key] 9 } 10 } 11 } 12 return objClone; 13 }
2. 通過JSON對象實現深拷貝
1
2
3
4
|
function
deepClone2(obj) {
let
_obj = JSON.stringify(obj),
return
JSON.parse(_obj);
}
|
注意: 無法實現對象中方法的深拷貝
3. 通過Object.assign()拷貝
注意: 當對象只有一級屬性為深拷貝;
當對象中有多級屬性時,二級屬性后就是淺拷貝
二,數組深拷貝的幾種方法
1. concat(arr1, arr2,....)
注意:當數組中的元素均為一維是深拷貝
數組中元素一維以上是值的引用
2. slice(idx1, idx2)
參數可以省略
1)沒有參數是拷貝數組
2)只有一個參數是從該位置起到結束拷貝數組元素
3)兩個參數,拷貝從起始位置到結束位置的元素(不包含結束位置的元素:含頭不含尾)
注意:當數組中的元素均為一維是深拷貝
數組中元素一維以上是值的引用