一、深浅拷贝
所谓的拷贝就是克隆,将某个对象的内容复制出来,再另外赋值给一个新的对象。
浅拷贝
只能复制对象第一层的属性,即原始类型的数据,不能拷贝引用类型的数据
let stu = {
name:"小明",
age:10,
friends:{
friendName:"小王",
toy:[1,2,3,4]
}
};
//浅拷贝算法
function copyObj(obj){
let newObj = {};
for (let i in obj ){
newObj[i] = obj[i]
}
return newObj
}
//调用函数
let newStu = copyObj(stu)
stu.friends.friendName= "小红"
console.log(stu)
console.log(newStu)
深拷贝
对某一个对象的全部属性完全复制下来。可以使用递归方法或者JSON进行深拷贝
1、递归方法
//深拷贝
let teacher = {
name: "张老师",
age: 23,
teachProject: {
projectName: "语文"
}
}
//进行拷贝算法
function deepCopyObject(obj1) {
let newObj1 = {};
for (let i in obj1) {
if (obj1[i] instanceof Object) {
newObj1[i] = deepCopyObject(obj1[i])
} else {
newObj1[i] = obj1[i]
}
}
return newObj1
}
let newTeacher = deepCopyObject(teacher)
console.log(teacher)
console.log(newTeacher)
teacher.teachProject.projectName = "Math"
console.log(teacher)
2、JSON方法
let stu = {
name:"小明",
age:10,
friends:{
friendName:"小王",
toy:[1,2,3,4]
}
};
let stuStr = JSON.stringify(stu)
let newObj = JSON.parse(stuStr)
console.log(newObj)