Il mio 2 ¢! In realtà, parte del motivo per cui lo sto lanciando qui, nonostante la lunga lista di risposte, è quello di fornire una all in one
soluzione un po 'più di tipo e ottenere un feedback in futuro su come espanderlo per includerne altri real types
.
Con la seguente soluzione, come già detto, ho combinato un paio di soluzioni trovate qui, oltre a incorporare una correzione per restituire un valore jQuerydell'oggetto definito su jQuery se disponibile . Aggiungo anche il metodo al prototipo di oggetto nativo. So che è spesso un tabù, in quanto potrebbe interferire con altre estensioni del genere, ma lo lascio a user beware
. Se non ti piace questo modo di farlo, copia semplicemente la funzione base dove preferisci e sostituisci tutte le variabili this
con un parametro argomento da passare (come argomenti [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;
})();
Quindi utilizzare semplicemente con facilità, in questo modo:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
Nota: esiste 1 argomento accettabile. Se è bool di true
, allora il ritorno sarà sempre in minuscolo .
Altri esempi:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
Se hai qualcosa da aggiungere che potrebbe essere utile, come definire quando un oggetto è stato creato con un'altra libreria (Moo, Proto, Yui, Dojo, ecc ...), non esitare a commentare o modificare questo e continuare ad essere più accurato e preciso. OPPURE passare a quello che GitHubho creato e farmelo sapere. Qui troverai anche un collegamento rapido a un file cdn min.
typeof new RegExp(/./); // "function"
problema in Chrome sembra essere risolto in Chrome 14.