Search code examples
javascriptecma262

JavaScript types


As per http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf, JavaScript has 6 types: undefined, null, boolean, string, number and object.

var und;
console.log(typeof und); // <-- undefined

var n = null;
console.log(typeof n); // <--- **object**!

var b = true;
console.log(typeof b); // <-- boolean

var str = "myString"
console.log(typeof str); // <-- string

var int = 10;
console.log(typeof int); // <-- number

var obj = {}
console.log(typeof obj); // <-- object

Question 1:

Why is null of type object instead of null?

Question 2:

What about functions?

var f = function() {};
console.log(typeof f); // <-- function

Variable f has type of function. Why isn't it specified in the specification as a separate type?

Thanks,


Solution

  • About typeof null == 'object', this is a mistake that comes since the early days, and unfortunately this mistake will stay with us for a long time, it was too late to be fixed in the ECMAScript 5th Edition Specification.

    About the functions, they are just objects, but they have an special internal property named [[Call]] which is used internally when a function is invoked.

    The typeof operator distinguish between plain objects and functions just by checking if the object has this internal property.