目录
一.浅拷贝
1.定义:
只拷贝了对象(引用类型)的地址。
var obj = {
name: "张三疯",
sex: "男"
}
var obj2 = obj;
obj2.sex = "女";
console.log("obj", obj);
console.log("obj2", obj2);
二.深拷贝
1.定义
将对象(引用类型 )数据和地址都拷贝一份。
- 深度不够
var obj = {
name: "张三疯",
sex: "男",
address: {
province: "陕西",
city: "咸阳"
}
}
var obj2 = {};
for (var key in obj) {
obj2[key] = obj[key]
}
obj.address.city = "渭南";
console.log("obj", obj);
console.log("obj2", obj2);
console.log("obj.address.city", obj.address.city);
console.log("obj2.address.city", obj2.address.city);
- 可以深拷贝属性中嵌套对象
var obj = {
name: "张三疯",
sex: "男",
address: {
province: "陕西",
city: "咸阳"
}
}
// 如果再有属性是对象,则会一直循环下去。则需要用递归
// var obj2 = {};
// for (var key in obj) {
// if (typeof obj[key] == "object") {
// obj2[key] = {};
// for (var subKey in obj[key]) {
// obj2[key][subKey] = obj[key][subKey]
// }
// } else {
// obj2[key] = obj[key]
// }
// }
// console.log(obj);
// console.log(obj2);
function copyObj(obj) {
var newObj = {};
for (var key in obj) {
if (typeof obj[key] == "object") {
newObj[key] = copyObj(obj[key]);
} else {
newObj[key] = obj[key]
}
}
return newObj;
}
let obj2 = copyObj(obj);
obj.address.city = "渭南";
console.log("obj", obj);
console.log("obj2", obj2);
console.log("obj.address.city", obj.address.city);
console.log("obj2.address.city", obj2.address.city);