JS拷贝(深拷贝、浅拷贝)

深度拷贝-浅拷贝(拷贝地址)

深度复制-无函数
方法一
deepClone(target) {

      return JSON.parse(JSON.stringify(target))

    }

this.deepClone(this.formBackUp)

方法二

function getType(target) {
  return Object.prototype.toString.call(target).slice(8, -1)
}

// 创建克隆的方法
function cloneUtil(target) {
  // 根据target类型构造最外层具体的数据类型
  let result
  if (getType(target) === 'Object') {
    console.log('------------')
    result = {}
  } else if (getType(target) === 'Array') {
    result = []
  } else result = target

  // 通过for...in....实现遍历
  for (const i in target) { // 这里使用的是for...in...,而没有使用forEach和for...of...,是为了统一使用
    // 提取出每一个具体的值:属性值或者是数组的数据

    // 判断要拷贝的值是引用地址还是基本数据类型
    const item = target[i]
    // console.log(getType(item) === "Object")
    if (getType(item) === 'Object' || getType(item) === 'Array') {
      result[i] = cloneUtil(item) // 这里其实是一个递归调用,而且,这里的result[i]不能去掉的
    } else {
      result[i] = item // 给Object对象或者是Array对象拷贝内容
    }
  }
  return result
}


一级复制  只有一层

 Object.keys(this.form).forEach((key) => {

      if (!this.form[key]) {

           this.form[key] = current[key]

        }

  })

都是浅拷拷贝,Object.assign可以实现 一级的深拷贝,后面全是地址拷贝,扩展符号也一样

{...} 、[....] 、  Object.assign({},obj)  、var c = obj   
都是拷贝地址  
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值