instanceof
The Left Hand Side (LHS) operand is the actual object being tested to the Right Hand Side (RHS) operand which is the actual constructor of a class. The basic definition is:
Checks the current object and returns true if the object
is of the specified object type.
Here are some good examples and here is an example taken directly from Mozilla's developer site:
var color1 = new String("green");
color1 instanceof String; // returns true
var color2 = "coral"; //no type specified
color2 instanceof String; // returns false (color2 is not a String object)
One thing worth mentioning is instanceof
evaluates to true if the object inherits from the classe's prototype:
var p = new Person("Jon");
p instanceof Person
That is p instanceof Person
is true since p
inherits from Person.prototype
.
Per the OP's request
I've added a small example with some sample code and an explanation.
When you declare a variable you give it a specific type.
For instance:
int i;
float f;
Customer c;
The above show you some variables, namely i
, f
, and c
. The types are integer
, float
and a user defined Customer
data type. Types such as the above could be for any language, not just JavaScript. However, with JavaScript when you declare a variable you don't explicitly define a type, var x
, x could be a number / string / a user defined data type. So what instanceof
does is it checks the object to see if it is of the type specified so from above taking the Customer
object we could do:
var c = new Customer();
c instanceof Customer; //Returns true as c is just a customer
c instanceof String; //Returns false as c is not a string, it's a customer silly!
Above we've seen that c
was declared with the type Customer
. We've new'd it and checked whether it is of type Customer
or not. Sure is, it returns true. Then still using the Customer
object we check if it is a String
. Nope, definitely not a String
we newed a Customer
object not a String
object. In this case, it returns false.
It really is that simple!
"foo" instanceof String
=> false,1 instanceof Number
=> false,{} instanceof Object
=> false. Say what?! – morbusg"foo" instanceof String => false
is correct, becausetypeof "foo" == 'string'
.new String("foo") instanceof String => true
, becausetypeof String == 'function'
- you should treat function like class (definition of class). Variable becomeinstanceof
somefunction
(class) when you assign it asvar v = new AnythingWhatTypeofEqualsFunction()
. The same applies to1
.typeof 1 == 'number'
- 'number' is not 'function' :) Next -{} instanceof Object
isTRUE
in node and modern browsers – fider({}) instanceof Object
will returntrue
. In fact the code you wrote will give you an error. – DDM