(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