区别:
深浅拷贝主要的区别的拷贝的层级不同,浅拷贝拷贝的是一层,深拷贝的是多层,深浅拷贝,都是针对引用数据类型的。
浅拷贝:拷贝后的变量与拷贝之前的变量,她们的指针指向同一个地方
实现深拷贝的方法
初始对象
1、JSON
let temp1 = JSON.stringify(obj)
temp1 = JSON.parse(obj)
打印结果:造成了某些属性的丢失
2、采用递归的方法
当不对null进行处理到时候,深拷贝出来的是一个 {} 对象。
整体的思路如下,
首先判断,当前引用数据类型是否不是object,如果不是就直接返回
然后根据数据判断是否为数组
然后遍历对象
然后判断,当前的对象是否是对象,如果不是对象呢,就是将值弄到新的对象去,如果是就递归一下。
Ps:我对null做了处理,实际上操作或者使用的时候,应该都没啥问题
function deepClone(obj) {
if (typeof obj !== 'object') { // 如果不是对象,直接返回
return obj
}
let tarObj;
if(obj instanceof Array) { // 判断对象是不是数组
tarObj = []
} else {
tarObj = {} // 目标对象
}
for(let key in obj) {
if(typeof obj[key] !== 'object' && obj[key] !== null) { // 如果里面的属性的类型已经不是对象了
let temp = obj[key]
console.log('qqqqqqqqq' ,temp,typeof temp, temp === null)
if(obj[key] === null) {
tarObj[key] = obj[key]
} else {
tarObj[key] = obj[key]
}
} else if(typeof obj[key] === 'object' && obj[key] === null) {
tarObj[key] = null
} else {
tarObj[key] = deepClone(obj[key])
}
}
return tarObj
}
`
实现浅拷贝的方法
1、赋值
Object.assign({}, obj);
let ass = {...obj};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。