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?
The java “instanceof” operator is used to test whether the object is an instance of the specified type (class or subclass or interface). It is also known as type comparison operator because it compares the instance with type. It returns either true or false.
To check if an object is not an instance of a class, use the logical NOT (!) operator to negate the use of the instanceof operator - !( obj instanceof Class) .
The instanceof operator. It returns true if obj belongs to the Class or a class inheriting from it.
Python issubclass() is built-in function used to check if a class is a subclass of another class or not. This function returns True if the given class is the subclass of given class else it returns False.
Might something as simple as
function isObj( test ) {
return test.constructor === Object;
}
Be what you are looking for?
Test in jsFiddle
You mean this? http://jsfiddle.net/elclanrs/ukEEw/
var o = {};
var re = /\d/;
var f = function(){};
var d = new Date();
var isObj = function(e){
return e.toString() === '[object Object]';
};
console.log( isObj(o) ); // True
console.log( isObj(re) ); // False
console.log( isObj(f) ); // False
console.log( isObj(d) ); // False
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With