JavaScript instanceof vs typeof

I’ve been writing JavaScript for yonks, but only recently came across instanceof , typeof on the otherhand I’ve always been aware of.

Each serve different purposes, and have slight differences.I recently got bitten, so here’s a note to self.

Using typeof, you get a string representation of the object type. Using instanceof, you are comparing the type, specifically if the property of a constructor is in the objects prototype chain.

Here are some exaxmples of the different behaviours.

  var Person = function() {}

  var gary = new Person();

  console.log(typeof(gary)); // "object"
  gary instanceof Person // true

  var str = 'hello world';
  console.log(typeof(str)); // "string"
  str instanceof String // False

  var str1 = new String('hello world');
  console.log(typeof(str1)) // "object"
  str1 instanceof String // true 

So in JavaScript, given that strings can be literals or objects, the correct way to test for a string would be to test against both cases.

  function isString(str) {
    return typeof(str) == 'string' || str instanceof String;