(Almost) everything is expression

François REMY fremycompany_pub at yahoo.fr
Fri Nov 11 01:26:14 PST 2011

<aside note>

    let x = q ? 10 : 20;

    Why we're reinventing the wheel here is up to me.


-----Message d'origine----- 
From: Dmitry Soshnikov
Sent: Friday, November 11, 2011 8:54 AM
To: David Herman
Cc: es-discuss Steen
Subject: Re: (Almost) everything is expression

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,


es-discuss mailing list
es-discuss at mozilla.org

More information about the es-discuss mailing list