(Almost) everything is expression

Dmitry Soshnikov dmitry.soshnikov at gmail.com
Thu Nov 10 23:54:21 PST 2011

On 11.11.2011 11:43, David Herman wrote:
>> 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.

Yes, all this relatively true, but personally I don't see the big issue. 
In practice we already have such a case e.g. for FD (function 
declaration) vs. FE (function expression).

The former doesn't require semicolon, the later does. Though, in the 
later case (FE), today most of programmers put explicit semicolon to 
avoid problems with scripts minimizing. From this viewpoint it's not a 
big price, since even now the programmers are already used to such cases.

Regarding old code it's also not the issue since there is no such old 
code, it's a syntax error. And even if a user will refactor code (to 
make it look shorter and elegantly), she should be aware about this case 
(again -- just like with FD and FE -- users are aware about it):


var x;

if (q) {
   x = 10;
} else {
   x = 20;


let x = if (q) {
} else {

>> 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

Yep, I've seen it before briefly; will check it more precisely later, 


More information about the es-discuss mailing list