js深拷贝和浅拷贝
js的深拷贝指的是基本数据类型,指的是变量1复制变量2的值后,改变变量2,不会影响变量1的值。
例如:
let num1 = 2;
let num2 = num1;
num2 = 3;
console.log(num1);// 2
console.log(num2);// 3
js的浅拷贝指的是引用数据类型,指的是将对象2复制对象1的值以后,改变的对象2的值以后,会将对象1的值也改变。原因是:(引用数据类型的拷贝,拷贝的是值,但是地址中的变量指向的依旧是一块地址。)
例如:
let obj1 = {
name: 'lnj'
}
let obj2 = obj1;
obj2.name = 'zs';
console.log(obj2.name);// zs
console.log(obj1.name);// zs
为了解决上面那个对象的浅拷贝,让js对象能深拷贝,下面封装了一个方法
例如:
class Person{
name = 'lnj';
hobby = {
cat: 'aa'
},
arr = [1, 3, 5];
}
let per = new Person();
let obj = new Object();
depCopy(obj, per);
function depCopy(target, source){
for(let key in source){ // 遍历拿到source对象中所有的属性
let sourceValue = source[key]; // 拿到当前属性对应的属性值
if(sourceValue instanceof Object){ // 判断当前取值是否是引用类型
let subTarget = new sourceValue.constructor;
target[key] = subTarget;
depCopy(subTarget, sourceValue);
}else{
target[key] = sourceValue;
}
}
}
以上代码全靠手打,如有错误,请下方留言。
来源:CSDN
作者:道济和尚
链接:https://blog.csdn.net/wenxiukeke/article/details/103457469