深拷贝和浅拷贝

深浅拷贝针对得是object和array这样得引用数据类型得

浅拷贝

eg:浅拷贝(for..in,Object.assign(),...             Array.prototype.slice(),Array.prototype.concat())

浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址

           var qian = {
                name: 'qiankaobei',
                age: 18,
                language: [1, [2, 3, [4, 5]]]
            }
            var qianfuzhi = Object.assign({}, qian)
            qianfuzhi.name = "qiankaobeiname"
            qianfuzhi.language[0] = 0
            console.log('qian', qian, '--------', 'qianfuzhi', qianfuzhi);

深拷贝

深拷贝(JSON.parse(JSON.stringify()),第三方库lodash)

深拷贝会开辟新的栈,两个对象对应两个不同的地址,修改对象A的属性,并不会影响到对象B。

            var shen = {
                name: 'shenkaobei',
                age: 18,
                language: [1, [2, 3, [4, 5]]]
            }
            var shenfuzhi = JSON.parse(JSON.stringify(shen))
            shenfuzhi.name = "shenkaobeiname"
            shenfuzhi.language[0] = 0
            console.log('shen', shen, '--------', 'shenfuzhi', shenfuzhi);

总结


(1)拷贝是为了部分或全部复用原对象的属性,在原对象的基础上创建一个新的对象。

(2)浅拷贝是拷贝后两个对象地址不相等,但两个对象的部分属性地址相等,新对象并没有拷贝所有的属性,而是复用原对象中的值。

(3)深拷贝是拷贝后两个对象不仅地址不相等,两个对象的所有属性地址都不相等。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值