var obj = {};
typeof obj; // returns \"object\"
obj instanceof Object // return true
typeof null // returns \"object\"
null instanceof Object // returns false
It's just the design decision which might be contrived or weird. According to the typeof UnaryExpression if evaluated as the following. I've just included the poin that matters.
ECMA Spec: Return a String determined by Type(val) according to Table 20.
Table 20:
╔═════════════╦══════════╗
║ Type of val ║ Result ║
╠═════════════╬══════════╣
║ null ║ "object" ║
╚═════════════╩══════════╝
So, there's nothing we can do about it. It's status-by-design. But it's correct to return false because, there is a separate type for null called Null type
Null type:type whose sole value is the null value
null isn't an instance of Object, obviously, since it has got it's own type. It's just that typeof operator returns "object". It's got to do with the design of javascript.
Why is it so? Will have to ask Brendan Eich(Founder of Javascript).