本篇博客参考了,这篇文章
深拷贝和浅拷贝的一个基本的区别就是:
深拷贝需要开辟新的内存空间,而浅拷贝只是复制引用的地址,并未开辟新的内存空间
1.深拷贝的步骤
深拷贝的步骤如下:
1.递归
2.判断类型
3.检查循环引用(环)
4.不可能拷贝原型 proto
2.深拷贝的代码实现如下所示:
function copyObj(obj){
let cloneObj;
//obj是简单数据类型的时候,直接拷贝
if(obj && typeof obj !== 'object'){
cloneObj = obj
}
//obj如果是对象和数组的时候
else if(obj && typeof obj === 'object'){
//检测obj到底是数组还是对象的数据类型
cloneObj = Array.isArray(obj)?[]:{};
for(let key in obj){
if(obj.hasOwnProperty(key)){
if(obj[key] && typeof obj[key] === 'object'){
//若当前元素类型为对象时,递归调用
cloneObj[key] = copyObj(obj[key])
}
//若当前类型为基本数据类型时候
cloneObj[key] = obj[key]
}
}
}
return cloneObj;
}
let str = "hello world"
let arr = [9,3,4,7,8,1,7,2,6]
let myObject = {
name:"elbert",
age:18,
height:"175cm"
}
console.log("copyObj1:",copyObj(str))
console.log("copyObj2:",copyObj(arr))
console.log("copyObj3:",copyObj(myObject))
控制台打印输出结果如下图所示: