JS深拷贝案例介绍两种方法
什么是深拷贝?
深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象
接下来我们使用深拷贝实现let a=[1,2,3,4],复制给let b = [];
这里我介绍两种方法
第一种方法
// 到时候我们传值到函数里
function deepClone(obj) {
// 我们先判断声明一个对象或数组 如果是数组就是[] 如果不是数组就是{}
let objClone = Array.isArray(obj) ? [] : {}
// 判断obj是否是对象 []也是对象object
if (obj && typeof obj === "object") {
// 我们就循环对象或者数组
for (key in obj) {
// 判断obj是否存在key
if (obj.hasOwnProperty(key)) {
// 判断obj[key]是否为对象 如果是递归复制
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepClone(obj[key])
} else {
// 如果不是对象 简单复制
objClone[key] = obj[key]
}
}
}
}
// 返回objClone
return objClone
}
let a = [1, 2, 3, 4]
b = deepClone(a)
a[0] = 2
console.log(a) //[2, 2, 3, 4]
console.log(b) //[1, 2, 3, 4]
第二种方法
function deepClone(obj) {
let _obj = JSON.stringify(obj);
let objClone = JSON.parse(_obj);
return objClone
}
let a = [1, 2, 3, 4]
b = deepClone(a)
a[0] = 2
console.log(a) //[2, 2, 3, 4]
console.log(b) //[1, 2, 3, 4]
感谢大家的阅读,如有不对的地方,可以向我提出,感谢大家!