js中对象的深拷贝的方法

js中对象的深拷贝

js深拷贝和浅拷贝的概念和区别。
1.浅拷贝;
    拷贝就是把父对像的属性,全部拷贝给子对象。此时子对象拷贝的是父对象的地址,子父对象相互影响。
2.深拷贝;
    就是把父对象的属性中的值拷贝给子对象此时不论父对象如何改变都不会再影响到子对象。
  • 浅拷贝,仅仅是指针给了另一个对象
 var obj = {
      name: '小甜甜', age: 24, say() {
        console.log(11111);
      }
    };
    
   var obj1 = obj;
   console.log(obj1); //{name: "小甜甜", age: 24, say: ƒ}
   obj1.name = '小辣椒';
   console.log(obj);//{name: "小辣椒", age: 24, say: ƒ}
  • 深拷贝:两个对象之间没有任何关系
  // 深拷贝:两个对象之间没有任何关系
	var obj = {
	      name: '小甜甜', age: 24, say() {
	        console.log(11111);
	      }
	    }; 
    //1通过json实现,会造成方法丢失
    var obj1 = JSON.stringify(obj);
     obj1 = JSON.parse(obj1);
     console.log(obj1); //{name: "小甜甜", age: 24}
     obj1.name = '小番茄';
     obj感受不到变化
    console.log(obj);//{name: "小甜甜", age: 24, say: ƒ}

    // 2通过for-in遍历循环,实现
    var obj2 = {};
    for (var attr in obj) {
      obj2[attr] = obj[attr]
     }
    console.log(obj2);// {name: "小甜甜", age: 24, say: ƒ}
     obj2.say()// 1
    //修改obj1
    obj1.name = '哈希';
    console.log(obj);// {name: "小甜甜", age: 24, say: ƒ}

    // 3使用Object.assign()
    var obj3 = {};
     将obj合并到obj3上
     Object.assign(obj3, obj);
     console.log(obj3);// {name: "小甜甜", age: 24, say: ƒ}
     // 修改obj3的值原对象也不会发生改变
     obj3.age = 66;
     console.log(obj);// {name: "小甜甜", age: 24, say: ƒ}
      console.log(obj3);// {name: "小甜甜", age: 66, say: ƒ}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学而时习之不亦说乎。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值