# 14.浅拷贝与深拷贝
- 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用
- 深拷贝拷贝多层,每一级别的数据都会拷贝
# 浅拷贝
let obj = {
id: 1,
name: '张三'
}
let o = {}
// 拷贝操作
for (let k in obj) {
// k是属性名 obj[k]是属性值
o[k] = obj[k]
}
// 但如果需要拷贝的对象是一个多层对象,如,对象嵌套
let obj2 = {
id: 1,
name: '张三',
cir: {
label: '犯罪'
}
}
// 用上述的方法就不能把cir属性完整的拷贝下来,因为cir是一个对象,属于调用数据类型,所以获取到的,是地址
// 上述这种方法,称之为浅拷贝
ES6浅拷贝方法
// 在ES6中,新增了方法可以进行浅拷贝
// Object.assign(target,..sources)
let o2 = {}
// 浅拷贝
Object.assign(o2, obj2)
console.log(o2)
# 深拷贝
function deepCopy (target, sources) {
for(let k in sources) {
// 获取属性值
let item = sources[k]
// 如果属于数组
if(item isstanceof Array) {
target[k] = []
deepCopy(target[k], item)
} else if (item isstanceof Object) {
// 是对象
target[k] = {}
deepCopy(target[k], item)
} else {
// 是简单数据类型
target[k] = item
}
}
}
deepCopy(o, obj)