Is the following a bug that needs to be fixed for ES 3.1?

David-Sarah Hopwood david.hopwood at
Thu Sep 4 16:48:57 PDT 2008

Michael Daumling wrote:
> Hi all,
> The following code produces a "first is not a function" error:
> Array.prototype.first = function()
>       { return this.length == 0 ? null : this[0]; }
> // no semicolon here
> (function() { if ([1,2].first() == 1) alert ("OK"); }())
> If the two statements are separated via a semicolon, there is no error.
> The problem is that the second statement is treated as a function argument to
> the function-expression.

This is not a bug.

A semicolon clearly can't be inserted here because it would change the
meaning of a valid program -- as opposed to making an invalid program
valid as in other cases of semicolon insertion. (Nor should we even
be considering *any* extensions to semicolon insertion, which is and
always was simply a bad idea.)

The program also can't be made invalid because that would be a backward-
incompatible change, and because there is no reason to make it invalid.

David-Sarah Hopwood

More information about the Es-discuss mailing list