1、浅拷贝实现方式
1.复制操作
let obj = {name: "浅拷贝"};
let newObj=obj;
newObj.name="修改";
console.log(obj)//{ name: '修改' }
console.log(newObj)//{ name: '修改' }
2.Object.assign
let obj = {name: "浅拷贝"};
let newObj=Object.assign({},obj);
newObj.name="修改";
console.log(newObj)//{ name: '修改'}
console.log(obj)//{ name: '浅拷贝'}
- …展开语法
let obj = {name: "浅拷贝"};
let newObj ={...obj};
newObj.name="修改";
console.log(newObj)//{ name: '修改'}
console.log(obj)//{ name: '浅拷贝'}
4.for in
let obj = {name: "浅拷贝"};
let newObj ={};
for (const key in obj) {
newObj[key]=obj[key]
}
console.log(newObj)
5.for of
let obj = {name: "浅拷贝"};
let newObj ={}
for(let [k,v] of Object.entries(obj)) {
newObj[k]=v
}
console.log(newObj)
2、深拷贝
使用递归的形式来实现拷贝
let obj = {
name: "深拷贝",
user: {
name: "张三",
},
arr:[]
};
function copy(object) {
let obj =object instanceof Array ?[]:{};
for (let key in object) {
obj[key] = typeof object[key] == "object" ? copy(object[key]) : object[key];
}
return obj;
}
let newObj = copy(obj);
newObj.user.name = "修改";
newObj.arr.push("哈哈")
console.log(newObj);
console.log(obj);