If you look at the ECMAScript 3 specification you will see that primitive value types Null and Undefined don't have accompanying Null and Undefined Objects.
>> Null
ReferenceError: Null is not defined
The other primitive value types Number, String and Boolean types do have accompanying Number, String and Boolean objects which you can reference from global scope.
>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }
The purpose for these primitive value types is to provide methods such as toString
and valueOf
for their respective primitive value types:
>>var n = 1;
>>n.toString();
"1"
is the same as
>>var n = 1;
>>Number.prototype.toString.call(n);
"1"
Booleans and strings also work that way:
>>var b = true;
>>b.toString();
"true"
>>Boolean.prototype.toString.call(b);
"true"
You can see that the primitive value objects are using the methods of their accompanying object when you try to mix types:
>>Boolean.prototype.toString.call(n);
TypeError: Boolean.prototype.toString is not generic
>>Number.prototype.toString.call(b)
TypeError: Number.prototype.toString is not generic
Interestingly enough for boolean and string literal types, you can call these methods directly from the literal:
>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"
Primitive values null and undefined, since they don't have accompanying Null and Undefined objects cannot do these things:
>>Null
ReferenceError: Null is not defined
>>null.toString()
TypeError: Cannot call method 'toString' of null
Primitive value type number behaves like a mix of the two. You can call toString
on a literal if you directly use the Number's prototype object's method:
>>Number.prototype.toString.call(1);
"1"
But you cannot access the method from the literal itself like you can with strings and booleans:
>>1.toString()
SyntaxError: Unexpected token ILLEGAL
Why is it that number literals behave differently from boolean and string even though there's a Number object?