常见的几种深拷贝

什么是深拷贝、浅拷贝?
通俗解释:深拷贝是内容拷贝,浅拷贝是地址拷贝

区别点:

深拷贝会创建一个新的内存空间,拷贝的值是一样的,但是内存地址不一样。
浅拷贝只是拷贝指向原来对象的地址,使原对象的引用计数+1

本文着重浅谈下深拷贝

本文只谈书写简单的深拷贝方法,利用递归等其他方法暂不涉及。

深拷贝不会拷贝引用类型的引用,而是将引用类型的值全部拷贝一份,形成一个新的引用类型,这样就不会发生引用错乱的问题,使得我们可以多次使用同样的数据,而不用担心数据之间会起冲突
方法一:
使用Object.assign(target, source)方法
方法的第一个参数是目标对象,后面的参数都是源对象

let data = { a:1 , b:2 }
let ccc = {c:3}
const newData = Object.assign({}, data, ccc)
data = {}
console.log(data,newData) // {}  {a:1 , b:2, c:3}

方法二:
JSON.parse(JSON.stringify());

let data = { a:1 , b:2 }
const newData = JSON.parse(JSON.stringify(data))
data = {}
console.log(data,newData) // {}  {a:1 , b:2}

方法三:
引入loadsh实现深拷贝

npm i --save lodash
import _ from 'lodash'
let data = { a:1 , b:2 }
const newData = _.cloneDeep(data)
data = {}
console.log(data,newData) // {}  {a:1 , b:2}

方法四:
jq的extend方法(需安装jq)

/**
* deep:深拷贝为true
* objClone:生成的新对象
* obj:拷贝的对象
*/
$.extend( deep, objClone, obj )
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值