浅拷贝是拷贝一层,深层次的对象级别的就拷贝引用;深拷贝是拷贝多层,每一级别的数据都会拷贝出来;
浅拷贝常见方法:
1.使用for in 不递归
2. ES6中的Object.assign方法
var obj = {
name: "2qzz",
like: "aurora",
};
let obj2 ={}
Object.assign(obj2,obj)
obj.age.b = 5
console.log(obj2)
Object.assign()是可以拷贝一层,如果对象只有一层的话,可以使用这个函数作为深拷贝
深拷贝常见方法:
深拷贝有多少层拷贝多少层,并且会开辟全新空间
1.使用 for in 循环
var obj = {
name: "2qzz",
like: "aurora",
age: {
a: 1,
b: 2,
},
};
function cloneObj(obj) {
let clone = {};
for (let i in obj) {
if (typeof obj[i] == "object" && obj[i] != null) { //注意这里是object 不是Object
clone[i] = cloneObj(obj[i]);
} else {
clone[i] = obj[i]
}
}
return clone
}
let clone = cloneObj(obj);
obj.age.a = '100'
console.log(obj)
console.log(clone)
```javascript
在这里插入代码片
2.如果对象里面有数组怎么办,数组也跟对象一样是引用类型,那么我们可以在开头加个判断它是对象还是数组,数组的话赋空数组,一样遍历拷贝:
function cloneObj(obj) {
// 通过原型链判断 obj 是否为数组
if (obj instanceof Array) {
var clone = [];
} else {
var clone = {};
}
for (let i in obj) {
// 如果为对象则递归更进一层去拷贝
if (typeof obj[i] == "object" && obj[i] != null) {
clone[i] = cloneObj(obj[i]);
} else {
clone[i] = obj[i];
}
}
return clone;
}
3.使用 JSON方法 转换
var obj = {
name: "2qzz",
like: "aurora",
age: {
a: [1, 2, 3],
b: 2,
},
};
let obj2 = JSON.parse(JSON.stringify(obj))
console.log(obj2)
参考文章:https://bbs.huaweicloud.com/blogs/296102?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=other&utm_content=content