方式:
操作的对象
var obj = {
a: "Hello",
b: {
a: "world",
b: 111,
},
c: [11, "Jack", "Tom"],
};
1、浅拷贝
1-1、遍历赋值
// 浅拷贝
function simpleCopy(o) {
var o_ = {};
for (let i in o) {
o_[i] = o[i];
}
return o_;
}
var newObj = simpleCopy(obj);
newObj.b.a = "WORLD";
console.log(obj);
console.log(newObj);
/**
obj 和 newObj都变了:
b: { "a": "WORLD", "b": 111}}
*/
1-2、Object.create()
var newObj = Object.create(obj);
newObj.b.a = "WORLD";
console.log(obj);
// b: {a: "WORLD", b: 111}
console.log(newObj);
// __proto__:
// b: {a: "WORLD", b: 111}
2、深拷贝
2-1、遍历赋值
function deepCopy(object, deepObject=null) {
let deepObj = deepObject || {};
for (let i in object) {
if (typeof object[i] === "object") {
// 引用类型 [] {} null
if(object[i] === null){
deepObj[i] = object[i];
} else{
deepObj[i] = object[i].constructor === Array ? []: {}
// deepObj[i] = object[i].constructor === Array ? []: Object.create(null);
deepCopy(object[i], deepObj[i])
}
} else{
// 简单数据类型
deepObj[i] = object[i];
}
}
return deepObj;
}
var newObj = deepCopy(obj);
newObj.b.a = "WORLD";
console.log(obj);
// b: {a: "world", b: 111}
console.log(newObj);
// b: {a: "WORLD", b: 111}
2-2 JSON
function deepCopy(o) {
return JSON.parse(JSON.stringify(o));
}
var newObj = deepCopy(obj);
newObj.b.a = "WORLD";
console.log(obj);
// b: {a: "world", b: 111}
console.log(newObj);
// b: {a: "WORLD", b: 111}