js对象深拷贝

对于深拷贝和浅拷贝,简单一句话带过,首先,基本数据类型(比如:Number、String、Boolean)不会出现浅拷贝和深拷贝的浅拷贝概念,对象会出现深拷贝和浅拷贝。假如A对象拷贝后是B对象,B对象中属性值的更改,A对象属性值也会更改,此为浅拷贝。深拷贝之后,B的更改不会影响到A属性。
深拷贝的实现方式:
1.手动复制

这里的复制并不是对象=对象(obj2 = obj1,此为浅拷贝)
var obj1 = { a: 10, b: 20, c: 30 };
var obj2 = { a: obj1.a, b: obj1.b, c: obj1.c };
obj2.b = 100;
console.log(obj1);
// { a: 10, b: 20, c: 30 } <-- 沒被改到
console.log(obj2);
// { a: 10, b: 100, c: 30 }


2.Object.assign()拷贝
当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。

object.assign方法的详细介绍

3.转化为JSON再转化回来
利用JSON.stringify()和JSON.parse();

var obj1 = { body: { a: 10 } };
var obj2 = JSON.parse(JSON.stringify(obj1));

4.使用Object.create()
使用Object.create可以达到深拷贝的效果

var obj = finalObj || {};    
  for (var i in initalObj) {        
    var prop = initalObj[i];        // 避免相互引用对象导致死循环,如initalObj.a = initalObj的情况
    if(prop === obj) {            
      continue;
    }        
    if (typeof prop === 'object') {
      obj[i] = (prop.constructor === Array) ? [] : Object.create(prop);
    } else {
      obj[i] = prop;
    }
  }    
  return obj;
}

利用一些已经有的封装好的库函数实现深拷贝
5.利用jquery中的$.exten()函数可以实现深拷贝
6.lodash很热门的函数库,提供了 lodash.cloneDeep()实现深拷贝

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值