区别:
深浅拷贝主要的区别的拷贝的层级不同,浅拷贝拷贝的是一层,深拷贝的是多层,深浅拷贝,都是针对引用数据类型的。

浅拷贝:拷贝后的变量与拷贝之前的变量,她们的指针指向同一个地方

实现深拷贝的方法

初始对象
image.png

1、JSON

let temp1 = JSON.stringify(obj)
temp1 = JSON.parse(obj)

打印结果:造成了某些属性的丢失
image.png

2、采用递归的方法

image.png
当不对null进行处理到时候,深拷贝出来的是一个 {} 对象。
整体的思路如下,
首先判断,当前引用数据类型是否不是object,如果不是就直接返回
然后根据数据判断是否为数组
然后遍历对象
然后判断,当前的对象是否是对象,如果不是对象呢,就是将值弄到新的对象去,如果是就递归一下。
Ps:我对null做了处理,实际上操作或者使用的时候,应该都没啥问题

function deepClone(obj) {
  if (typeof obj !== 'object') {  // 如果不是对象,直接返回
 return obj
  }
  let tarObj;
 if(obj instanceof Array) { // 判断对象是不是数组
 tarObj = []
  } else {
     tarObj = {} // 目标对象
 }
  for(let key in obj) {
    if(typeof obj[key] !== 'object' && obj[key] !== null) { // 如果里面的属性的类型已经不是对象了
 let temp  = obj[key]
      console.log('qqqqqqqqq' ,temp,typeof temp, temp === null)
      if(obj[key] === null) {
        tarObj[key] = obj[key]
      } else {
        tarObj[key] = obj[key]
      }
    } else if(typeof obj[key] === 'object' && obj[key] === null) {
      tarObj[key] = null
 } else {
      tarObj[key] = deepClone(obj[key])
    }
  }
  return tarObj
}

`

实现浅拷贝的方法

1、赋值

Object.assign({}, obj);
let ass = {...obj};

kkw凯凯王
42 声望2 粉丝