浅克隆(shallow copy):新旧对象共享一个地址,改变一个,另一个也会改变(浅拷贝只能拷贝值类型的数据,对于引用类型,只会拷贝引用地址,如果有引用类型,多个拷贝对象会共用同一个引用类型的数据,造成混乱。)
深克隆(deep copy):新旧对象不共享一个地址。
一、数组
1 .concat
2 .slice(0)
3.数组扩展 let […arr1] = arr2
4.一一遍历赋值
function deep(arr1){
let arr = [];
for(let i in arr1){
arr.push(arr1[i]);
}
return arr;
}
二、对象
1.对象扩展 let {…arr1} = arr2
2.一一遍历赋值
function deep(obj) {
let obj1 = {};
for (let key in obj) {
obj1[key] = obj[key];
};
return obj1;
}
三、数组、对象通用
1.JSON.parse(JSON.stringify(arr))
2.一一遍历
function deepCopy(v) {
let o = v.constructor === Array ? [] : {};
for (let i in v) {
o[i] = typeof v[i] === "Object" ? deepCopy(v[i]) : v[i];
}
return o;
}
四、注意
Object.assign({},arr1,arr2) Object.assign 它只对顶层属性做了赋值,完全没有继续做递归之类的把所有下一层的属性做深拷贝。
Object.assign(arr1,arr2) // 浅拷贝。
3.8 女神节记~