深拷贝与浅拷贝区别
浅拷贝是引用同一个对象,如果对拷贝的对象进行数据更改,原数据也会一起改变,深拷贝是直接复制一整个数据,引用地址都不一样,不会影响原数据。
浅拷贝代码实现
// 使用Object.assign ,展开运算符进行浅拷贝
const obj = {a: 1}
// asssign方法,第一个参数是目标对象,剩下参数为原对象,会被合并到目标对象中
const obj2 = Object.assign(obj2, obj)
const obj3 = {...obj}
深拷贝代码实现
// 1、使用JSON.parse(JSON.stringfy)
// 2、递归实现
function deepCopy(arr) {
// 先判断是否为基本类型
if(typeof arr !== Object) {
return arr
}
// 判断数组还是对象
const copy = Array.isArray(arr) ? [] : {}
for(let key in arr) {
//只复制本身属性,不复制原型链上继承的属性
if(Object.prototype.hasOwnProperty.call(arr, key)) {
copy[key] = deepCopy(arr[key]); // 递归遍历所有属性
}
}
return copy;
}