深拷贝与浅拷贝

发布时间:2022-07-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了深拷贝与浅拷贝脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

拷贝不要用于对象

浅拷贝:拷贝的是内存地址,不管修改拷贝前或者拷贝后,两者都会改变

深拷贝:新创建一个对象,使用循环,把拷贝前的每一项拷贝给新对象,不管修改拷贝前或者拷贝后,两者都不会受影响。

// 基本类型:String Number Boolean null undefined symbol
// 引用类型: Object(Array function(但函数不可用) Data)  
// 深拷贝和浅拷贝适用于引用类型
// 基本类型是存储在栈内存中,引用类型是存储在堆内存中(栈内存中存储的是堆内存中的引用地址)
//浅拷贝 引用类型拷贝的内存地址,只拷贝是一层,
let a = [1, 2, 3]
let b = a;
a[0] = 4;
console.LOG(b);
// 深拷贝 拷贝所有 深拷贝是新创建一个对象 把需要拷贝的对象中的每一项 拷贝一份 给新对象
 VAR obj = {
    name: "rql"
}
var obj2 = {};
for (let i in obj) {
    obj2[i] = obj[i];
}
obj.name = "rqy";
console.log(obj);
console.log(obj2);
console.log(obj2.name);

// json格式也是对象
var p = {
    "id": "007",
    "name": "刘德华",
    "Books": new Array('三国演义', '水浒传', '西游记')
}
var p2 = {}
for (var key in p) {
    if (tyPEof p[key] == 'object') { //判断是否是引用类型
         p2[key] = []; //创建一个新数组,来存储拷贝的数据
         for (var i in p[key]) {
             p2[key][i] = p[key][i];
         }
     } else {
         p2[key] = p[key]
         }
     }
p.id = "008";
p2.books[0] = "四国";
console.log(p);
console.log(p2);

 

脚本宝典总结

以上是脚本宝典为你收集整理的深拷贝与浅拷贝全部内容,希望文章能够帮你解决深拷贝与浅拷贝所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。