El typeofoperador realmente no nos ayuda a encontrar el tipo real de un objeto.
Ya he visto el siguiente código:
Object.prototype.toString.apply(t)  Pregunta:
¿Es la forma más precisa de verificar el tipo de objeto?
                    
                        javascript
                                
                    
                    
                        Royi Namir
fuente
                
                fuente

Respuestas:
La especificación de JavaScript proporciona exactamente una forma adecuada de determinar la clase de un objeto:
http://bonsaiden.github.com/JavaScript-Garden/#types
fuente
Object.prototype.toString.call(new FormData()) === "[object FormData]"que sería cierto. También puede usarslice(8, -1)para regresar enFormDatalugar de[object FormData]Object.prototypey{}?Object.prototype.toString.call(new MyCustomObject())vuelve[object Object]mientrasnew MyCustomObject() instanceOf MyCustomObject returns trueque es lo que quería (Chrome 54.0.2840.99 m)new MyCustomObject().constructor === MyCustomObject.el
Object.prototype.toStringes una manera buena, pero su rendimiento es el peor.http://jsperf.com/check-js-type
Use
typeofpara resolver algún problema básico (String, Number, Boolean ...) y useObject.prototype.toStringpara resolver algo complejo (como Array, Date, RegExp).y esta es mi solución:
usar como:
fuente
typefunción es buena, pero observe cómo funciona en comparación con otrastypefunciones. http://jsperf.com/code-type-test-a-test({}).toString.call(obj)es más lento queObject.prototype.toStringjsperf.com/object-check-test77La respuesta aceptada es correcta, pero me gusta definir esta pequeña utilidad en la mayoría de los proyectos que construyo.
Usado así:
Si está usando angular, incluso puede inyectarlo limpiamente:
fuente
Controle el prototipo que espera que tenga el objeto y luego compárelo con él.
por ejemplo
fuente
o instanceof String; //true?"foo" instanceof Stringrompetypeof(x)==='string'úsalas.Object.getPrototypeOf(true)falla donde(true).constructorvuelveBoolean.Yo diría que la mayoría de las soluciones que se muestran aquí sufren de ingeniería excesiva. Probablemente la forma más simple de verificar si un valor es de tipo
[object Object]es verificar la.constructorpropiedad del mismo:o incluso más corto con funciones de flecha:
La
a != nullparte es necesaria porque uno puede pasarnulloundefinedno puede extraer una propiedad de constructor de ninguno de estos.Funciona con cualquier objeto creado a través de:
Objectconstructor{}Otra característica interesante es su capacidad de proporcionar informes correctos para las clases personalizadas que utilizan
Symbol.toStringTag. Por ejemplo:El problema aquí es que cuando se llama
Object.prototype.toStringa una instancia,[object Object]se devolverá el informe falso :Pero verificar contra el constructor da un resultado correcto:
fuente
La mejor manera de averiguar el tipo REAL de un objeto (incluyendo AMBOS el nombre del objeto nativo o del tipo de datos (como String, Date, Number, ..etc) Y el tipo REAL de un objeto (incluso los personalizados); es agarrando La propiedad de nombre del constructor del prototipo de objeto:
Tipo nativo Ex1:
muestra:
Ex2:
muestra:
Clases personalizadas:
muestra:
fuente
nulloundefined.Antigua pregunta que sé. No necesitas convertirlo. Ver esta función:
Ejemplos:
Bajo costo y simple.
fuente
falsesi el objeto de prueba esnulloundefinedtrueofalsefalse. ¿Cómo ayuda esto a responder la pregunta?Reuní una pequeña utilidad de verificación de tipo inspirada en las respuestas correctas anteriores:
ejemplo:
fuente
nulloundefinedotrueofalse