美文网首页js
深度拷贝(递归拷贝)

深度拷贝(递归拷贝)

作者: CRUD_科科 | 来源:发表于2019-06-14 09:44 被阅读0次

    深度拷贝

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

    // 深度拷贝 递归拷贝  (拷贝出来的和被拷贝的没有关系)
    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(){}}}}]))
    

    相关文章

      网友评论

        本文标题:深度拷贝(递归拷贝)

        本文链接:https://www.haomeiwen.com/subject/istufctx.html