未整理—js中的深拷贝

第一次实现:

function deepCopy(data) {
  let c = data.constructor === 'Array'?[]:{};
  for (let key in data)     {
    if (data.hasOwnProperty(key)) {
      if (typeof data[key] === 'Object') {
        c[key] = deepCopy(data[key]);
      } else {
        c[key] = data[key];
      } 
    }
  }
  return c;
}
 

var obj = {
  a: 1,
  b: 2,
  c: {
    d: 10,
    e: 11
  }
}

let obj2 = deepCopy(obj);
obj.a = 'aaaa';

obj2.b = 'bbbb';
console.log(obj);
console.log(obj2);



var personInfo = {
name : 'zhang',
age: 26,
family: {
 province: 'hunan',
 city: 'changsha',
}
};
var copyPerson = deepCopy1(personInfo);
personInfo.name = 'shaunZh';
personInfo.family.province = 'gd';
personInfo.family.city = 'yuenan';
console.log('modify personInfo: ');
console.log(personInfo);
console.log('get copyPerson: ');
console.log(copyPerson);

你的深拷贝函数的值,有考虑过以下值吗?symbol,function,正则,数组,undefined,null,循环引用的对象?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,275评论 0 4
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 2,622评论 9 22
  • 三,字符串扩展 3.1 Unicode表示法 ES6 做出了改进,只要将码点放入大括号,就能正确解读该字符。有了这...
    eastbaby阅读 1,591评论 0 8
  • 对于河西走廊一带的人来说,乌鞘岭是一个具有决定性意义的所在。乌鞘岭以东,是喧嚣的东部世界,而乌鞘岭以西,则是寂静而...
    西江岳阅读 677评论 0 1
  • 生活怎么继续 时间怎样安排 怎样才能获得成就感呢? 人生怎么才能活的充实而精彩?
    King_SmallDrago阅读 184评论 0 1