On Oct 21, 2010, at 11:18 PM, Dominic Cooney wrote: > Is it helpful to keep picking at these nits?
Sure, much appreciated. These have to get fixed sooner or later, sooner's fine. Thanks again, /be > > Dominic > > On Fri, Oct 22, 2010 at 3:15 PM, Brendan Eich <[email protected]> wrote: > On Oct 21, 2010, at 10:58 PM, Dominic Cooney wrote: > >> 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. > > This is just another (still not formal enough, obviously not yet not > carefully spec'ed :-|) grammar bug, copied from the ES4 destructuring > proposal page. SpiderMonkey and Rhino get it right: > > js> var {"0": x} = {"0":42} > js> x > 42 > js> var {"0blah": z} = {"0blah":42} > js> z > 42 > > >> 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? > > No, that goes too far. There's no way to name the binding. It's not a > property of any object. Again, SpiderMonkey: > > js> var {"0blah"} = {"0blah":42} > typein:1: SyntaxError: missing variable name: > typein:1: var {"0blah"} = {"0blah":42} > typein:1: .....^ > > >> 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 > > Right, that's the way to go. I'll make sure the wiki page is updated again. > Thanks, > > /be > > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

