一、定义&作用
1、定义
- 浅拷贝:复制的是栈的值(复杂类型数据复制其引用,还是指向堆中同一对象)
- 深拷贝:复制栈和堆的值(复杂类型数据会开辟新的栈,两个对象对应两个不同的地址)
二、语法
- 浅拷贝
1、使用展开运算符
const obj1 = { a: 1 }
const obj2 = { ...obj1 }
2、使用Object.assign()方法
const obj1 = { a: 1 }
const obj2 = Object.assign(obj1)
- 深拷贝
1、用JSON.stringify()方法把对象转换成字符串,再用JSON.parse()把字符串转换成新的对象
const obj1 = { a: 1, b: { c: 2 } }
const obj2 = JSON.parse(JSON.stringify(obj1))
2、lodash函数库的 _.cloneDeep(obj) 方法
import lodash from 'lodash'
const obj1 = { a: 1, b: { c: 2 } }
const obj2 = _.cloneDeep(obj1)
3、手写递归克隆
function clone(obj) {
const newObj = obj.constructor === Array ? [] : {}
if (typeof obj !== 'object') {
return
}
for (var i in obj) {
newObj[i] = typeof obj[i] === 'object' ? clone(obj[i]) : obj[i]
}
return newObj
}
const obj1 = { a: 1, b: { c: 2 } }
const obj2 = clone(obj1)