(Almost) everything is expression

David Herman dherman at mozilla.com
Thu Nov 10 23:43:57 PST 2011


> Brendan and Dave mention explicit semicolon. Yes, it's seems so by the grammar (though, have to check more precisely), but it can be acceptable price.

It's a serious price, though. Today if I write:

    if (q) { ... }
    else { ... }
    (f())

then ASI kicks in after the else body. If we make if-statements into expressions, then either the above becomes a single expression, which is a serious and subtle backwards-incompatible change, or we define lookahead restrictions on ExpressionStatement, and introduce a refactoring hazard:

    x = if (q) { ... }
        else { ... }
    (f())                 // oops, this is now a parameter list on the RHS of the assignment!

I'm not positive, but that seems like a serious issue to me.

> Though, it can be visually _really_ ambiguous with object initialisers in case of using labels inside the block:

A JS grammar needs to be formally unambiguous, so it requires very careful specification. Syntax design for JS is very tricky.

> Nope, have to think more on this...

You might want to take a look at this:

    http://wiki.ecmascript.org/doku.php?id=strawman:block_vs_object_literal

Dave



More information about the es-discuss mailing list