Meus 2 ¢! Realmente, parte da razão pela qual estou lançando isso aqui, apesar da longa lista de respostas, é fornecer um pouco mais de all in one
solução de tipo e receber um feedback no futuro sobre como expandi-lo para incluir mais real types
.
Com a solução a seguir, como mencionado acima, eu combinei algumas soluções encontradas aqui, além de incorporar uma correção para retornar um valor jQueryno objeto definido no jQuery, se disponível . Também anexo o método ao protótipo de objeto nativo. Eu sei que isso geralmente é um tabu, pois pode interferir em outras extensões, mas deixo isso para user beware
. Se você não gosta dessa maneira, simplesmente copie a função base em qualquer lugar que desejar e substitua todas as variáveis this
por um parâmetro de argumento para passar (como 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;
})();
Em seguida, basta usar com facilidade, assim:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
Nota: Há 1 argumento aceitável. Se for bool de true
, o retorno estará sempre em minúsculas .
Mais exemplos:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
Se você tiver algo a acrescentar que talvez seja útil, como definir quando um objeto foi criado com outra biblioteca (Moo, Proto, Yui, Dojo, etc ...), sinta-se à vontade para comentar ou editar isso e mantê-lo mais preciso e preciso. OU passe para o que GitHubeu fiz e me avise. Você também encontrará um link rápido para um arquivo cdn min.
typeof new RegExp(/./); // "function"
problema no Chrome parece ser fixado no Chrome 14.