Cómo determinar con precisión el tipo de datos de una variable

Antes de resolver el problema anterior, debemos comprender los conocimientos básicos.

Hay cinco tipos básicos de tipos de datos JS, indefinidos, nulos, booleanos, número, cadena.

También hay un tipo de datos complejo, objeto

Desde el método de almacenamiento, se divide en tipos de valor, tipos de referencia y objeto es el tipo de referencia.

tipo de

Este operador solo puede determinar el tipo de datos del tipo de valor, el tipo de referencia no puede subdividirse específicamente

console.log(typeof '123'); // string
console.log(typeof 123); // number
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
console.log(typeof null); // object
console.log(typeof [1,2]); // object
console.log(typeof {a:1});// object
console.log(typeof /[a]/);// object
console.log(typeof function(){}) // function

En el código anterior, todos los objetos de salida son nulos, matrices, objetos y expresiones regulares, pero el tipo de función se distingue, pero la función no es un tipo de valor. La función sigue siendo un objeto, pero el estado de la función es muy alto. El lenguaje está diseñado para que typeof pueda distinguir funciones.

Entonces la pregunta es, ¿cómo subdividir el tipo de datos del objeto?

function judgeType(item){
  let type = typeof item;

  //判断元素是否为数组
  if(type === 'object'){

  	if(Array.isArray(item)){
  		type = 'array';
  	}else if(item == undefined){
  		type = 'null';
  	}else{
  		const temp = item.toString();

	    if(temp[0] === '/'){
	      type = 'regexp';
	    }
  	}
    
  }

  return type;
}

El código anterior no debería ser difícil de entender, por lo que no lo explicaré en detalle. Pruebe la precisión de la función

function judgeType(item){
  let type = typeof item;

  //判断元素是否为数组
  if(type === 'object'){

  	if(Array.isArray(item)){
  		type = 'array';
  	}else if(item == undefined){
  		type = 'null';
  	}else{
  		const temp = item.toString();

	    if(temp[0] === '/'){
	      type = 'regexp';
	    }
  	}
    
  }

  return type;
}

console.log(judgeType('123'));
console.log(judgeType(123) );
console.log(judgeType(true) );
console.log(judgeType(undefined) )
console.log(judgeType(null) ) // null
console.log(judgeType([1,2]) ); // array
console.log(judgeType({a:1}) ); // object
console.log(judgeType(/[a]/) ); // regexp
console.log(judgeType(function(){}) ) 

Por supuesto, la función anterior no puede juzgar Set, Map y otros objetos, la salida sigue siendo objeto.

Supongo que te gusta

Origin www.cnblogs.com/tourey-fatty/p/12721449.html
Recomendado
Clasificación