深度拷贝(递归拷贝)

深度拷贝

拷贝出来的和被拷贝的没有关系,即被拷贝的属性改变,拷贝出来的属性不会跟着改变。

// 深度拷贝 递归拷贝  (拷贝出来的和被拷贝的没有关系)
function deepClone(value) {
  // null undefined直接返回 null == undefined是true,但是null == undefined是false
  if (value == null) return value; // 因为上面,所以这里只判断null
  if (typeof value !== 'object') return value;  // 不是对象的有:Number、Boollean、Function
  if (value instanceof Date) return new Date(value);  // 如果是日期返回重新创建的日期
  if (value instanceof RegExp) return new RegExp(value);
  // 如果是对象或者数组
  let construc = new value.constructor(value);
  for (const key in value) {
    if (value.hasOwnProperty(key)) {
      construc[key] = deepClone(value[key]); // 如果是obj,那么继续调用自己循环,这就叫做递归拷贝
    }
  }
  return construc;
}
// console.log(new {}.constructor)  // {}.constructor = Object()  new Object() = {} 
console.log(deepClone([1,2,{a:{b:1,c:{d:function(){}}}}]))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,800评论 1 32
  • 工具:iPad pro + Apple pencilApp:procreate 继续练习,熟悉笔刷,形成iPad画...
    iheyi合一阅读 1,131评论 0 0
  • 如果你喜欢看小说,热爱文学,就关注我们【乐阅】lereader,【乐读】leread。 昨天和几个同事一起吃饭,吃...
    乐阅读书阅读 2,985评论 0 0
  • 下载好linux之后,配置安装eclipse。 (1)下载jdk, apache(服务器),eclipse文件夹(...
    海纳百川_4d26阅读 2,532评论 0 0