深拷贝与浅拷贝

1.深拷贝(Deep Copy):
深拷贝就是增加一个“指针”,并申请一个新的内存,并且让这个新增的‘指针’指向这个新的内存地址,使用深拷贝,在释放内存的时候不会像浅拷贝一样出现重复释放同一段内存的错误,当我们需要复制原对象而又不能修改元素对象的时候,深拷贝就是一个,也是唯一的选择。
下面简单的写一个引用类型数据的深拷贝:

 // 深拷贝引用类型数据
        function deepData(data) {
            if (data.constructor.name === 'Array') { // 为数组
                var arrCopy = []
                for (var i = 0, len = data.length; i < len; i++) {
                    arrCopy.push(data[i])
                }
                return arrCopy;
            } else { // 为对象
                var objCopy = {};
                for (x in data) {
                    objCopy[x] = data[x];
                }
                return objCopy;
            }
        }
        var obj = {
        name : '浅爱',
        age : 21,
        dec : '清风拂过,爱意如仟'
		}
		var res = deepData(obj)
		console.log(res)

// 输出结果:

如此可见,obj这个数据已经成功被res给拷贝过来了

2.浅拷贝(Shallow Copy)
简单的来说,浅拷贝就是增加了一个’指针’指向已存在的内存(JavaScript并没有指针的概念,这里只是用于辅助说明),浅拷贝只是拷贝了内存的地址,子类的属性指向的是父类属性的内存地址,当子类的属性修改后,父类的属性也会随之被修改。
浅拷贝小案列:

//此递归方法不包含数组对象
var obj = { a:1, arr: [2,3] };
var shallowObj = shallowCopy(obj);

function shallowCopy(src) {
  var newobj = {};
  for (var prop in src) {
    if (src.hasOwnProperty(prop)) {
      newobj[prop] = src[prop];
    }
  }
  return newobj;
}

在这里插入图片描述

两者之间的区别:

一个对象浅复制后,是深层次的对象地址的复制,并没有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会发生改变,而深复制的则是开辟了一个新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值