深入浅出浅拷贝与深拷贝

浅拷贝:一般指的是把对象的第一层拷贝到一个新对象上去,比如

var a = { count: 1, deep: { count: 2 } }
var b = Object.assign({  }, a)

或者

var c = { ...a }
console.log(b) // { count: 1, deep: { count: 2 } }
console.log(c) // { count: 1, deep: { count: 2 } }

深拷贝:一般需要借助递归实现拷贝,如果对象的值还是个对象,要进一步的深入拷贝,完全替换掉每一个复杂类型的引用

var deepCopy = (obj) => {
    var ret = {}
    for(let key in obj) {
        var value = obj[key]
        ret[key] = typeof value === 'object' ? deepCopy(value) : value
    }
    return ret
}

对于同一个用例来说

a.deep.count = 5
console.log(b.deep.count) // 5

var e = deepCopy(a)
a.deep.count = 5
console.log(e.deep.count) // 2

总结:浅拷贝改变其拷贝的值会影响到其本身,而深拷贝不会,深拷贝则是开出另外的地址值去储存这个拷贝出来的结果,浅拷贝则是相同地址值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值