How do you check if a JavaScript object is directly an `{}` instance, not a subclass?

javascript

Solution

Might something as simple as

function isObj( test ) {
    return test.constructor === Object;
}

Be what you are looking for?

Test in jsFiddle

Problem

I have spent 10 or 20 minutes here and there probably a dozen times in the past year and never found a bulletproof answer to this question. How do you check if a JavaScript object is an instance of `Object`, not a subclass? One use case for this is to check if `arguments[0]` is an "options" hash vs. a "model" (MVC), both of which extend the native `Object`, but which should be treated differently. I have tried these: ``` // some helper to get constructor name function klassName(fn) { if (fn.__name__) { return fn.__name__; } if (fn.name) { return fn.name; } return fn.toString().match(/\W*function\s+([\w\$]+)\(/)); }; var Model = function() {}; m = new Model; o = {}; Object(o) === o; // true Object(m) === m; // true, thought it might be false klassName(o.constructor); // Object klassName(m.constructor); // Model ``` That `klassName(m.constructor)` doesn't work in some cases (can't remember exactly, but maybe a regex.constructor, something like that). Maybe it does, don't know for sure. Is there a bulletproof way to tell if something is an `{}` object?

Original source