什么是深拷贝、浅拷贝?
通俗解释:深拷贝是内容拷贝,浅拷贝是地址拷贝
区别点:
深拷贝会创建一个新的内存空间,拷贝的值是一样的,但是内存地址不一样。
浅拷贝只是拷贝指向原来对象的地址,使原对象的引用计数+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 )