深浅拷贝
浅拷贝
浅拷贝指的是只复制的地址,还是指向的同一个对象,修改复制后的对象,原来的对象也发生改变。
浅拷贝方式
1.创建浅拷贝函数
function simpleClon(object) {
let obj = {}
for (const i in object) {
obj[i] = object[i]
return obj
}
}
2.Object.create()
let copyObj = Object.create(obj);
深拷贝
深拷贝是指两个对象是两个独立的对象,修改属性不会相互影响
深拷贝方式
1.创建深拷贝函数
function deepClon(object, endobj) {
let obj = endobj || {}
for (const i in object) {
if (typeof object[i] === 'object') {
//如果是引用类型,给obj[i]创建空数组或空对象,然后在再将object[i]中的 值一一拷贝,最终形成独立的对象
obj[i] = object[i].constructor === Array ? [] : {}
deepClon(object[i], obj[i])
} else {
obj[i] = object[i]
}
}
return obj
}
2.Json拷贝
//JSON.stringify() 将obj转换为字符型,然后通过JSON.parse() 再转回对象,可以实现深拷贝
//因为字符串是原始类型,会进行深拷贝
let deepObj = JSON.parse(JSON.stringify(obj));