1.浅拷贝:浅拷贝是只拷贝这个对象的指针,而不是对象本身,新旧对象共用同一个内存地址,修改新对象会影响旧对象。
let obj = {
id: 1,
name: 'Andy',
msg: {
age: 20
}
}
let o = {}
for (let k in obj) {
o[k] = obj[k]
}
console.log(o)
//语法糖浅拷贝:
Object.assign(o, obj)
2.深拷贝:深拷贝就是新建一个一模一样的对象,新旧对象用的不是同一个内存地址,修改新对象不会影响到旧对象。
let obj = {
id: 1,
name: 'Bob',
msg: {
age: 20,
sex: '男'
},
hobby: ['sing', 'movie']
}
function deepCopy(newObj, oldObj) {
for (let k in oldObj) {
let item = oldObj[k]
if (item instanceof Array) {
newObj[k] = []
deepCopy(newObj[k], item)
} else if (item instanceof Object) {
newObj[k] = {}
deepCopy(newObj[k], item)
} else {
newObj[k] = item
}
}
}
deepCopy(o, obj)