How can I check if my javascript object is of a certain type.
var SomeObject = function() { }
var s1 = new SomeObject();
In the case above typeof s1
will return "object". That's not very helpful. Is there some way to check if s1 is of type SomeObject ?
Yes, using
instanceof
(MDN link | spec link):Whatever you do, avoid obj.constructor.name or any string version of the constructor. That works great until you uglify/minify your code, then it all breaks since the constructor gets renamed to something obscure (ex: 'n') and your code will still do this and never match:
Note:
(BTW, I need higher reputation to comment on the other worthy answers here)
While instanceof is a correct answer it sure is ugly syntax. I offer that if you are creating custom objects you can add your own property for type and check against that like so...
This would create an immutable property called type that lives with the object. If you were using the Class syntax you could make it static as well.
... somewhere later ...
...
I think this solution is easy to implement, more intuitive, and thus easier for others to use and maintain.
Idea stolen from http://phpjs.org/functions/get_class/, posted by SeanJA. Ripped down to work with objects only and without need for a regular expression:
I just learned an easier way to extract the function name from the constructor:
You could also take a look at the way that they do it in php.js:
http://phpjs.org/functions/get_class:409