对象的深拷贝和浅拷贝多种方法的总结

          //浅拷贝
          let obj={
                name:'xswl',
                age:18,
                fun:function () {
                    return this.name;
                }
            };
            let obj2 = obj;
            obj2.name='js';
            console.log(obj.name,obj2.name);//js,js
            
           //深拷贝  
           //方法1  遍历obj
           let obj = {
                name: 'awsl',
                age: 18
            };
            let oldObj = {}
            for (let i in obj) {
                oldObj[i] = obj[i];
            }              

          //方法2 JSON.stringify()
          let J = JSON.stringify(obj);
          let obj3 = JSON.parse(J);
           
          //方法3 Object.assign() 
          let obj4 = {}//目标对象
          let obj5 = {a:'xswl',b:5}//现有对象 
          obj4 = Object.assign(obj4,obj5);
          obj4.b = 10; //修改obj4的属性b的值
          console.log(obj4.b,obj5.b) //10  5

一 浅拷贝:

  • obj变量保存的是对象的内存地址,如果只是赋值给obj2,就是将obj所保存的内存地址赋值给obj2使两个变量指向一个对象就是浅拷贝,因此改变obj2时obj也会跟着改变.

二 深拷贝:

  1. 使用 JSON.stringify() 方法.
  2. Object.assign() 方法, 此方法
    参数1:目标对象, 参数2: 现有对象.
    作用:可以将现有对象可枚举的属性复制到目标对象中.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值