Copia profunda manuscrita, copia superficial

(1) Copia poco profunda

var obj1 = {
   name: 'zs',
   school: 'qq',
   major: {
     math: 'gs'
   }
}
var obj2 = obj1
obj1.major.math = 'zh'
console.log(obj2.major.math) // zh

Dos objetos apuntan a la misma dirección de referencia, uno de ellos cambia, los campos correspondientes de los otros objetos también cambiarán, esta es una copia superficial

(2) Copia profunda

El propósito de la copia profunda es: si uno de ellos cambia, los campos correspondientes de los otros objetos no cambiarán y aún mantendrán el valor original. Esta es una copia profunda. El principio de la copia profunda es reabrir el espacio de memoria para el objeto y luego hacer referencia a él. El objeto se copia cíclicamente y se almacena en una nueva memoria

var obj1 = {
  name: 'zz',
  age: 23,
  arr: [1, 2, 3],
  major: {
    main: 'computer',
    other: 'math',
    majorArr: [1, 2, 3],
  }
}

// 深拷贝 针对数组和对象
function deepClone (target) {
  // 如果不是数组或者对象直接返回
  if (typeof target !== 'object') {
    return target
  }

  let newData;
  if (target instanceof Object) {
    newData = {}
  }
  if (target instanceof Array) {
    newData = []
  }

  for (let key in target) {
    // hasOwnProperty
    if (target.hasOwnProperty(key)) {
      newData[key] = deepClone(target[key]) // 递归!!对象的值是对象也需要处理
    }
  }
  
  return newData
}

var obj2 = deepClone(obj1)

obj1.major.other = 333
obj1.arr[0] = 344
obj1.major.majorArr[1] = 399 
console.log(obj2)
console.log(obj1)

Se puede ver que obj1 es obj1, obj2 es obj2 y no se afectan entre sí. Esta es una copia profunda

 

Supongo que te gusta

Origin blog.csdn.net/Luckyzhoufangbing/article/details/108580520
Recomendado
Clasificación