Skip to content
Create a gist now

Instantly share code, notes, and snippets.

// See
(function(global) {
// Maintain a map of already-encountered types for super-fast lookups. This
// serves the dual purpose of being an object from which to use the function
// Object.prototype.toString for retrieving an object's [[Class]].
var types = {};
// Return a useful value based on a passed object's [[Class]] (when possible).
Object.toType = function(obj) {
var key;
// If the object is null, return "Null" (IE <= 8)
return obj === null ? "Null"
// If the object is undefined, return "Undefined" (IE <= 8)
: obj == null ? "Undefined"
// If the object is the global object, return "Global"
: obj === global ? "Global"
// Otherwise return the XXXXX part of the full [object XXXXX] value, from
// cache if possible.
: types[key =] || (types[key] = key.slice(8, -1));
cowboy commented Aug 8, 2011

See this JSFiddle example.

jdalton commented Aug 8, 2011

I dig the Global check. Imma add that to my projects that have similar methods. I will post a link when I update it to detect global on server-side enviros too.

angus-c commented Aug 9, 2011

yeah good call on the IE7 / IE8 undefined/null issue (your second "// If the object is undefined, return "Null" (IE <= 8)" is wrong :-)

jd - I did the global check in my original article too :-;

jdalton commented Aug 9, 2011

@angus-c You win double internets \o/

cowboy commented Aug 9, 2011

@angus-c why is it wrong? If obj === null then obj is null. If that check fails, if obj == null then obj must be undefined.

cowboy commented Aug 9, 2011

@angus-c hahaha thanks, fixed! I think I need more sleep.


I know this is ancient code, but for anyone stumbling on this today (mid 2014), note that PhantomJS currently returns "DomWindow" for both undefined and null (it's a known bug, but still)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.