实现深拷贝的几种方法

  1. 通过递归实现深拷贝
  var deepCopy= function(source) {
 var result={};
 for (var key in source) {
     result[key] = typeof source[key]=== 'object'? deepCopy(source[key]): source[key];
  }
  return result;
 }

 const obj1 = { a : 1, b : 2, newobj: { a: 1 }}
 const obj2 = deepCopy(obj1)
 obj1.newobj.a = 2;
 console.log(obj1); // { a : 1, b : 2, newobj: { a: 2 }}
 console.log(obj2); // { a : 1, b : 2, newobj: { a: 1 }}

  1. 通过json.stringfy和json.parse实现
  const obj1 = { a : 1, b : 2}
 const obj2 = JSON.parse(JSON.stringify(obj1));
 obj1.a = 2;
 console.log(obj1); // { a:2, b:2 }
 console.log(obj2); // { a:1, b:2 }

这种方法有缺陷,当对象中包含 undefined、函数以及 symbol 值的时候,在 JSON.stringify() 序列化过程中会被忽略,无法实现深拷贝。

  1. 通过$.extend()实现深拷贝
var item={name:“olive”,age:23,address{provice:”河南”,city:”郑州”}};
var item1={sex:”girl”,address{city:”北京”}};
var result=$.extend(true,item,item1);
var result1=$.extend(false,item,item1);

打印result和result1的结果为

Result={name:“olive”,age:23,sex:”gril”,address:{provice:”河南”,city:”北京”}};

Result1={name:“olive”,age:23,sex:”gril”,address:{ city:”北京”}};

当extend内的第一个参数为true时,实现的是深拷贝,false是浅拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值