js juzga con precisión el tipo de un objeto

        El uso de typeof para juzgar el tipo de datos en JavaScript solo puede distinguir cinco tipos básicos , a saber, "número", "cadena", "indefinido", "booleano" y "objeto" .

        Para matrices, funciones y objetos , la relación es compleja y typeof devolverá uniformemente la cadena "objeto".

¿Cómo juzgar tipos complejos como objetos, matrices y funciones?

        Para distinguir objetos, matrices y funciones, simplemente usar typeof no es suficiente. En JavaScript, puede usar el método Object.prototype.toString para juzgar.

Object.prototype.toString()
La función del método toString es devolver la forma de cadena de un objeto. Por defecto, se devuelve el tipo cadena . Por lo tanto, se puede utilizar para determinar el tipo de un valor.

como:

var o = {};
o.toString(); // "[object Object]"

El código anterior llama al método del objeto vacío toStringy el resultado devuelve una cadena object Object, la segunda de las cuales Objectrepresenta el constructor del valor. Esta es una forma muy útil de determinar el tipo de datos.

Sin embargo, las matrices, las cadenas, las funciones y los objetos de fecha anulan cada uno su propia versión del toStringmétodo y anulan Object.prototype.toStringel método.

var arr = [];
arr.toString(); //''


[1, 2, 3].toString() // "1,2,3"

'123'.toString() // "123"

 Encontramos que el objeto de instancia puede personalizar toStringel método y anular Object.prototype.toStringel método. A través calldel método de funciones, se pueden llamar métodos sobre cualquier valor Object.prototype.toStringpara ayudarnos a determinar el tipo de este valor.

Object.prototype.toString.call(value)

ejemplo:

var arr = [];
console.log(Object.prototype.toString.call(arr))  
// "[object Array]"

 Dado que todo en JavaScript es un objeto y nada es una excepción, aplicar el método Object.prototype.toString.call() a todos los tipos de valores da como resultado lo siguiente:

console.log(Object.prototype.toString.call(123)) //[object Number]
console.log(Object.prototype.toString.call('123')) //[object String]
console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
console.log(Object.prototype.toString.call(true)) //[object Boolean]
console.log(Object.prototype.toString.call({})) //[object Object]
console.log(Object.prototype.toString.call([])) //[object Array]
console.log(Object.prototype.toString.call(function(){})) //[object Function]

 

Extensión: implementar la función de juzgar el tipo de objeto

//判断是否为函数

function isFunction(it) {
        return Object.prototype.toString.call(it) === '[object Function]';
    }

//判断是否为数组:

function isArray(o) { 
  return Object.prototype.toString.call(o) === '[object Array]';  
}

Supongo que te gusta

Origin blog.csdn.net/icanlove/article/details/43702879
Recomendado
Clasificación