¡Mis 2 ¢! Realmente, parte de la razón por la que estoy lanzando esto aquí, a pesar de la larga lista de respuestas, es proporcionar una all in one
solución de tipo un poco más y obtener información en el futuro sobre cómo expandirla para incluir más real types
.
Con la siguiente solución, como se mencionó anteriormente, combiné un par de soluciones encontradas aquí, así como también incorporé una solución para devolver un valor de jQueryun objeto definido en jQuery si está disponible . También agrego el método al prototipo de objeto nativo. Sé que a menudo es tabú, ya que podría interferir con otras extensiones, pero lo dejo user beware
. Si no le gusta esta forma de hacerlo, simplemente copie la función base en cualquier lugar que desee y reemplace todas las variables this
con un parámetro de argumento para pasar (como los argumentos [0]).
;(function() { // Object.realType
function realType(toLower) {
var r = typeof this;
try {
if (window.hasOwnProperty('jQuery') && this.constructor && this.constructor == jQuery) r = 'jQuery';
else r = this.constructor && this.constructor.name ? this.constructor.name : Object.prototype.toString.call(this).slice(8, -1);
}
catch(e) { if (this['toString']) r = this.toString().slice(8, -1); }
return !toLower ? r : r.toLowerCase();
}
Object['defineProperty'] && !Object.prototype.hasOwnProperty('realType')
? Object.defineProperty(Object.prototype, 'realType', { value: realType }) : Object.prototype['realType'] = realType;
})();
Luego, simplemente use con facilidad, así:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
Nota: Hay 1 argumento aceptable. Si es bool de true
, entonces el retorno siempre estará en minúsculas .
Más ejemplos:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
Si tiene algo que agregar que pueda ser útil, como definir cuándo se creó un objeto con otra biblioteca (Moo, Proto, Yui, Dojo, etc.), siéntase libre de comentar o editar esto y mantenerlo como más exacto y preciso. O pasar al GitHubque hice para hacerme saber. También encontrará un enlace rápido a un archivo cdn min allí.
typeof new RegExp(/./); // "function"
problema en Chrome parece estar solucionado en Chrome 14.