Inconsistency with null

Rick Waldron waldron.rick at gmail.com
Sun May 11 20:56:00 PDT 2014


On Sun, May 11, 2014 at 11:43 PM, Sakthipriyan Vairamani <
sakthiprofessional at gmail.com> wrote:

> console.log(typeof null);
>  ​# object​
>
> ​console.log(Object.prototype.toString.call(null));
> #​
> ​ [object Null]​
>
>
> ​This means that null​
> ​ is expected to be an object. But,
>

>> ​console.log(Object.keys(null));​
>
> ​# TypeError: Object.keys called on non-object​
>
>
>  ​The error message says that null​
> ​ is a non-object. It contradicts the result of typeof and toString.
>

This has been discussed extensively on this list over many years. Here is
the last relevant strawman proposal:
http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null

The TL;DR: typeof null is not going to change because it's too much of
web-breaking risk.


>
> *Question 1:* Why does it behave so? Is this something which has to be
> fixed?
>

No.


>
> Also, null is not a keyword <http://es5.github.io/#x7.6.1.1>, but when I
> do
>
>> ​var null = 1;
> # SyntaxError: Unexpected token null​
>
>
> ​It fails with the Syntax Error, since it is a Reserved Word<http://es5.github.io/#x7.6.1>
> .
>
> *Question 2:* What is the purpose of keeping null and boolean literals as
> "Reserved words" and not just keywords?
>
>

I apologize for answering this with another question, but what would the be
the point in changing them to keywords?

Rick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140511/af3786a7/attachment.html>


More information about the es-discuss mailing list