The proposed syntax for destructuring objects at <
http://wiki.ecmascript.org/doku.php?id=harmony:destructuring> is:

Pattern ::= "{" (Field ("," Field)* ","?)? "}"
        (array destructuring elided)
Element ::= Pattern | LValue
Field ::= Identifier (":" Element)?
LValue ::= <any lvalue expression allowed in a normal assignment expression>

This misses the opportunity for some parallelism with object literals. For
example, I can construct {' 0blah': x} with an object literal, but I can't
access the ' 0blah' with object destructuring.

Maybe Field ::= Identifier (":" Element)? could be changed to:

Field ::= PropertyName (":" Element)?

(using ECMA-262's PropertyName) to permit {' 0blah': x} = ...

This also allows seeming nonsense like {' 0blah'}, but I'm not sure that is
so bad since bindings in *objects* can have names that aren't identifiers,
so why not in scopes in general, too? Although destructuring could no longer
be implemented via desugaring because there's no way to make a binding with
an arbitrary name in the current scope.

So to preserve desugarability you could spell out the alternatives of
PropertyName in Field, to require elements with strings and numbers:

Field ::= Identifier (":" Element)?
    | StringLiteral ":" Element
    | NumericLiteral ":" Element

Dominic
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to