My 2¢! Really, part of the reason I'm throwing this up here, despite the long list of answers, is to provide a little more all in one type solution and get some feed back in the future on how to expand it to include more real types .

With the following solution, as aforementioned, I combined a couple of solutions found here, as well as incorporate a fix for returning a value of jQuery on jQuery defined object if available. I also append the method to the native Object prototype. I know that is often taboo, as it could interfere with other such extensions, but I leave that to user beware . If you don't like this way of doing it, simply copy the base function anywhere you like and replace all variables of this with an argument parameter to pass in (such as arguments[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; })();

Then simply use with ease, like so:

obj.realType() // would return 'Object' obj.realType(true) // would return 'object'

Note: There is 1 argument passable. If is bool of true , then the return will always be in lowercase.

More Examples:

true.realType(); // "Boolean" var a = 4; a.realType(); // "Number" $('div:first').realType(); // "jQuery" document.createElement('div').realType() // "HTMLDivElement"