Copia profunda copia superficial, prototipo, verificación de tipo, copia profunda recursiva

Copia superficial copia profunda, prototipo, verificación de tipo, copia profunda recursiva

Copia superficial:

let top = {
    
    
      name: "赵云",
    };
    let bom = "云中君";
    function shallowCopy(src) {
    
    
  var newobj = {
    
    };
  for (var prop in src) {
    
    
    if (src.hasOwnProperty(prop)) {
    
    
      newobj[prop] = src[prop];
    }
  }
  return newobj;
}

En términos simples, una copia superficial es un puntero a un valor, y ambos valores cambiarán cuando cambie el valor actual.

Copia profunda:

// 示例
   let ttp = [{
    
     name: "123" }, {
    
     name1: "1233" }];
    let aa = ttp;
    aa[0].name = "0";
    console.log(ttp);    
//我们可以借助这个实例来看,如果你直接赋值,当你的aa中发生改变,ttp中也会跟着改变

	//我们可以使用JSON.parse(JSON.stringify(ttp));
 let ttp = [{
    
     name: "123" }, {
    
     name1: "1233" }];
    let aa = JSON.parse(JSON.stringify(ttp));
    aa[0].name = "0";
    console.log(ttp);
这样就 不会改变

La copia profunda consiste en extraer los tipos de referencia complejos poco a poco y asignarlos a un espacio recién abierto sin interferir con los datos originales.

prototipo:

Cada objeto en JavaScript tiene una propiedad –proto, que corresponde a su propio prototipo.
Cada función en JavaScript tiene una propiedad proto. Esta propiedad tiene una propiedad de prototipo. Esta propiedad es el prototipo.

Verificación de tipo

Tipo de datos básicos: Número de cadena booleano nulo simbólico indefinido Tipo de
datos de referencia: datos de función de matriz de objetos

.Tipo de juicio:

1.typeof: puede juzgar algunos tipos de datos básicos, y no funciona cuando se encuentran tipos de datos de referencia.
2.instanceof juzga los tipos de datos de referencia creados por new sin considerar los tipos de datos básicos creados por nulos e indefinidos
3.constructor can resolver tipos de datos básicos generales y tipo de referencia.
Solo si crea un constructor y lo apunta a la matriz, no funcionará 4.object.prototype.toString.call () para determinar a qué objeto pertenece, no puede determinar personalizado

Copia profunda recursiva

 function cloneDeep(obj) {
    
    
 3         // 3.根据obj为对象或者数组,产生一个空的对象或数组,存放数据
 4         var newobj = obj instanceof Array ? [] : {
    
    },
 5         // 1.for...in进入循环
 6         for (var k in obj) {
    
    
 7           // 2.判断对象的第一个属性是否为数组或者对象,如果是,则进入递归
 8           // if (obj[k] instanceof Array) {
    
    
 9           //   newobj[k] = cloneDeep(obj[k])
10           // } else if (obj[k] instanceof Object) {
    
    
11           //   newobj[k] = cloneDeep(obj[k])
12           // }
13           // 4.上面两个执行逻辑一样,进行合并
14           if (typeof obj[k] === ‘object‘) {
    
    
15             newobj[k] = cloneDeep(obj[k])
16           } else {
    
    
17             // 5.如果数据为基本类型,则直接赋值
18             newobj[k] = obj[k]
19           }
20         }
21         // 6.把存放了数据的新对象返回出去
22         return newobj
23       }  

Use funciones recursivas o recursivas para lograr una copia profunda:
use métodos recursivos para tomar valores en el anidamiento de objetos o de matriz, y coloque el valor recuperado en un nuevo espacio para completar la copia profunda.

Supongo que te gusta

Origin blog.csdn.net/weixin_54163765/article/details/112589510
Recomendado
Clasificación