深拷贝和浅拷贝

js中对象分为基本类型和复合(引用)类型,基本类型存放在栈内存,复合(引用)类型存放在堆内存。

 

1.浅拷贝

简单的变量拷贝,并不会发生引用

var a = 123456;
var b = a;
a = 456789;
console.log(a)//456789;
console.log(b)//123456;

引用只发生在对象的身上,因为对象引用的是一个地址,那么两个都同时指向了一个地址,那么改变其中一个,另一个也必然会改变。

数组
var
arr = [1,2,3]; var arr1 =arr; arr.push(4); console.log(arr)//[1,2,3,4]; console.log(arr1)//[1,2,3,4];

对象

  var obj = {
    name:"name",
  };
  var obj1 =obj;
  obj1.age = "45";
  console.log(obj);

  console.log(obj1)

 

 

2.深拷贝

深拷贝和浅拷贝最根本的区别:深拷贝可以拷贝出一个全新的内存地址。

(1)深拷贝在计算机中开辟了一块内存地址用于存放拷贝的对象。

(2)浅拷贝仅仅是指向被拷贝的内存地址,如果原地址中对象发生了改变,那么浅拷贝出来的对象也会相应的改变。

 

在处理深拷贝的时候,我们可以利用递归的思想来实现,节省性能,并且不会发生引用。

josn:
var test ={
    name:{
        xing:{ 
        first:'张',
        second:'李'
    },
    ming:'你好'
},
    age :40,
    friend :['123','456','789']
}
var result = JSON.parse(JSON.stringify(test));
result.age = 30 
result.name.xing.first = '陈'
result.friend.push('101112;4567899');
console.dir(test)
 console.dir(result)
var ojj = {a:1,arr:[1,2]};
var sha = shall(ojj);
 function shall(src){
    var dst ={};
    for(var prop in src){
         console.log(prop)
         if(src.hasOwnProperty(prop)){
          dst[prop]=src[prop];
         }
        }
    return dst;
}
sha.bgg="21";
console.log(sha,ojj)

 

转载于:https://www.cnblogs.com/MJ-MY/p/9024859.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值