对象的深拷贝和浅拷贝

浅拷贝

深拷贝,浅拷贝的根本区别在于 是否开辟新的内存空间存放复制实体.浅拷贝仅仅是指向了原来的对象内存地址..他们互相影响,深拷贝不会.

Object.assign(target,obj1,obj2) 他会把遍历多个源数据的可枚举类型属性。然后把他们合并到target对象上,进行返回
浅拷贝方法:

// 实现的是浅拷贝
  var c = {
        age: 1,
        name: undefined,
        sex: null,
        tel: /^1[34578]\d{9}$/,
        say: () => {
            console.log('hahha')
        }
    }

    let b = Object.assign(c)
    c.sex = 1
    console.log(b.sex) //1

深拷贝的实现

 

  function copy(obj) {
    let deep_copy_obj= obj=> {
      let new_obj = {}
      for (key in obj) {
        let dataType = Object.prototype.toString.apply(obj[key])
        if (dataType == '[object Object]') {
          for (let k in obj[key]) {
            new_obj[key] = deep_copy_obj(obj[key])
          }
        } else if (dataType == '[object Array]') {
          new_obj[key] = deep_copy_arr(obj[key])
        }
        else {
          new_obj[key] = obj[key]
        }
      }
      return new_obj
    }

    let deep_copy_arr= arr=>{
      let new_arr = []
      arr.forEach((item, i) => {
        let dataType = Object.prototype.toString.apply(item)
        if (dataType == '[object Array]') {
          new_arr[i] = deep_copy_arr(item)
        } else if (dataType == '[object Object]') {        
            new_arr[i] = deep_copy_obj(item)   
        }
        else {
          new_arr.push(item)
        }
      })
      return new_arr
    }
    return deep_copy_obj(obj)
  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。