一、浅拷贝
1.1、浅拷贝指只拷贝一层,更深层次级别的只拷贝引用
<script>
var obj = {
id: 1,
name: 'andy'
msg:{
age: 16
}
}
var o = {
for(var k in obj) {
// k 是属性名 obj[k]是属性值
// 将对象obj中的值拷贝给对象o
o[k] = obj[k]
}
}
console.log(o)
o.msg.age = 20
console.log(obj) // 当改变o中的age时obj中的age = 20
// 浅拷贝语法糖
// Object.assign(target,...sources)
Object.assign(o,obj) // 将obj拷贝给o
</script>
备注: 浅拷贝当遇见深层次的拷贝时只会将地址拷贝(而不是开辟新的地址)
二、深拷贝
2.1、深拷贝拷贝多层,每一级别的数据都拷贝
<script>
var obj = {
id: 1,
name: 'andy'
msg:{
age: 16
}
}
var o = {};
// 封装函数
function deepCopy(newobj,oldobj) {
for(var k in oldobj) {
// 判断我们的属性值属于那种数据类型
// 1、获取属性值
var item = oldobj[k]
if(item instanceof Array) {
oldobj[k] = []
deepCopy(newobj[k],item) // 函数递归,将item的值赋值给newobj
} else if(item instanceof Object) {
oldobj[k] = {}
deepCopy(newobj[k],item) // 函数递归,将item的值赋值给newobj
}else {
newobj[k] = item
}
}
}
deepCopy(o,obj)
</script>
来源:CSDN
作者:六月七星
链接:https://blog.csdn.net/qq_42550235/article/details/104416474