深拷贝和浅拷贝(js的问题)
2023-12-17 04:56:52
- 深拷贝:修改复制对象,原始对象不会变化
- 浅拷贝:修改复制对象,原始对象也变化
方式:
- 遍历赋值
- Object.create()
- JSON.parse()和JSON.stringify()
操作的对象
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}
文章来源:https://blog.csdn.net/dxn16638400024/article/details/135039595
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!