Juicio de tipo de datos JS, clonación en profundidad

1. Juicio del tipo de datos

Pila: tipo de datos primitivo (indefinido, nulo, booleano, número, cadena)
montón: tipo de datos de referencia (objeto, función, matriz)
La diferencia entre los dos es que la ubicación de almacenamiento es diferente.

boolean     typeof -> boolean
string      typeof -> string
number      typeof -> number   
                    特殊值:Infinity正无穷大 / -Infinity负无穷大 / NaN
           
null        typeof -> object                null === null
undefined   typeof -> undefined      undefined   === undefined
array       typeof -> object 
                          精确判断方法:xx instanceof Array 为true时
object      typeof -> object      
                          精确判断方法:xx instanceof Array 为false时
function    typeof -> function

Ejemplo de objeto de juicio:

   var obj = {
    
    };
        if(typeof obj === 'object' && !(obj instanceof Array)){
    
    
            console.log("obj 是一个对象");
        }

La definición y el valor de objeto y matriz

  • Objeto: una colección desordenada de pares clave-valor
    Matriz: un objeto cuyo nombre de propiedad es un número

  • Atravesar el objeto: for clave en bucle
    Atravesar la matriz: for ... bucle

  • Valor del objeto: obj.key, obj [clave]
    ---- Asignación: obj.key = valor, obj [clave] = valor

La diferencia entre obj [key] y obj.key
  • obj.key: Solo se pueden obtener valores normales
  • obj [clave]: puede obtener variables o cadenas complejas
 var obj = {
    
     name: "yokia", age: 11 };
    var myname = "name";
    console.log(obj[myname]);  // yokia
    console.log(obj.myname);    // undefined

En segundo lugar, el clon de profundidad del objeto

Clonación superficial de objetos

Las variables cuyos valores de tipo de referencia apuntan a la misma dirección del montón son congruentes. Si se cambia una variable, la otra variable cambiará en consecuencia.
método:

  • Asignación directa
  • para crea una nueva variable
  • Object.assign (obj1, obj2…) La combinación de objetos combina las propiedades de todos los objetos desde el segundo hasta el primer objeto y devuelve el objeto combinado. Si el atributo del objeto siguiente tiene el mismo nombre que el atributo del objeto anterior, el valor se sobrescribirá.

Clon superficial de matriz

Las dos matrices apuntan a la misma dirección de pila, una se cambia y la otra se cambia en consecuencia.
método:

  • Asignación directa
  • para crear una nueva variable, presione () a su vez
  • slice () cortar desde el principio
  • concat () conectar con un objeto vacío
 var arr1 = [];
        for(var i = 0; i < arr.length; i ++){
    
    
            arr1.push(arr[i]);
        }
        console.log("for arr", arr1 === arr, arr1); // true

        var arr2 = arr.slice(0);
        console.log("slice ", arr2 === arr, arr2);  // true
        
        var arr3 = [].concat(arr);
        console.log("concat ", arr3 === arr, arr3);  // true

        console.log(arr[3] === arr1[3]); // true

Clon profundo

  • JSON.parse (JSON.stringify (obj)): la función de función en el objeto se perderá
var user = {
    
    
    name: "libai",
    age: 12,
    friend: ["汪伦"],
    sayName: function(){
    
    
        console.log(this.name);
    }
}
var user2 = JSON.parse(JSON.stringify(user));
console.log("user2", user2);

Inserte la descripción de la imagen aquí

  • Encapsule la función de clonación profunda, utilizando el pensamiento recursivo:
 // 函数方法的深克隆
function deepclone(obj){
    
    
    // 排除null
    if(obj === null){
    
    
        return null;
    }
    // 如果是数组类型,新对象也应该是数组类型
    var newObj = obj instanceof Array ? [] : {
    
    };

    for(var i in obj){
    
    
      newobj[i] =
           typeof obj[i] === "object" ? deepclone(obj[i]) : obj[i];
      
        // obj[i] 是一个引用类型的时候  null array object
        // if(typeof obj[i] === "object"){
    
    
        //     newobj[i] = deepclone(obj[i]);
        // }else{
    
    
        //     newobj[i] = obj[i];
        // }
    }
    return newObj;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_47067248/article/details/107965111
Recomendado
Clasificación