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);
- 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;
}