最容易明白的浅拷贝和深拷贝

浅拷贝和深拷贝区别

浅拷贝: 浅拷贝就是拷贝了一层,除了对象是拷贝的引用类型,如对象{}(当被拷贝的对象值改变,值也会变),其他都是直接将值传递,有自己的内存空间的(当被拷贝的对象值改变,值不会变)。

深拷贝:
会将每一层拷贝出来,当被拷贝的对象值改变,值也不会变

//浅拷贝
function simpleClone(initalObj) {
var obj = Array.isArray(initalObj)?[]:{} ;
for ( var i in initalObj) {
obj[i] = initalObj[i];
}
return obj;
}

//深拷贝
function deepClone(obj){
let objClone = Array.isArray(obj)?[]:{};
if(obj && typeof obj===“object”){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ===“object”){
objClone[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
let a= {
a: “hello”,
b:{
a: “world”,
b: 21
},
c:[“Bob”, “Tom”, “Jenny”],
d:function() {
alert(“hello world”);
}
}

b=deepClone(a);
c = simpleClone(a)

a.a = "changed";

a.b.a = “changed”;
a.b.b = 25;
a.c = [1, 2, 3];
a.d = function() { alert(“changed”); };
console.log(a,);
console.log(b);
console.log©;

在这里插入图片描述
图中所勾画的地方,就是浅拷贝,深拷贝不同的地方,第二个为深拷贝,第三个为浅拷贝。可以看到浅拷贝值已经改变,深拷贝并未改变。

深拷贝方法推荐
1.JSON方法
d= JSON.parse(JSON.stringify©)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值