深拷贝:
修改新变量的值不会影响原有变量的值
默认情况下基本数据类型都是深拷贝
基本数据类型:
一:
for(let key in p1){
p2[key] = p1[key]
}
二:
assign方法可以将第二个参数的对象的属性和方法拷贝到第一个参数对象中
Object.assign(p2,p1)
引用数据类型:
class person{
name = "smh";
cat = {
age:3
};
scores = [1, 3, 5];
}
let p1 = new person();
let p2 = new Object();
depCopy(p2, p1)
function depCopy(target, source){
//1.通过遍历拿到source中所有的属性 Object
for(let key in source){
//2.去除当前遍历到的属性对应的取值
let sourceValue = source[key];
//3.判断当前的取值是否是引用数据类型
if(sourceValue instanceof Object){
//sourceValue.constructor拿到对象的构造函数
let subTarget = new sourceValue.constructor;
target[key] = subTarget;
//递归函数
deCopy(subTarget, sourceValue);
}else{
target[key] = sourceValue
}
}
}
浅拷贝:
修改新变量的值会影响原有的变量的值
默认情况下引用数据类型都是浅拷贝