On Tue, Sep 17, 2013 at 4:27 PM, Brendan Eich <[email protected]> wrote:
>> Nathan Wall <mailto:[email protected]>
>> September 17, 2013 10:06 AM
>> I'm wondering what the best syntax is for object destructuring outside of
>> a var declaration. For instance, the following works in Firefox Nightly and
>> Traceur:
>>
>> […]
>>
>> var a, b;
>> ({ a, b }) = foo;
>>
>> Is the above what people are expected to use (when they need to use
>> destructuring outside of a var/let declaration or function arguments), or is
>> there another form available?
>
> That's it. Lars Hansen originated destructuring for ES4 and implemented
> array patterns in Futhark (Opera's engine of the time), but not object
> patterns. His first proposal used
>
> &{a: x, b: y} = foo
>
> for just the reason you cite, but no one was keen on the ASI hazard
> (previous line must end with a semicolon). We cut the & pretty soon in ES4's
> evolution.
>
> I say use var/let/const, it's better style; or else suffer a parentheses
> tax. This is pretty much a non-issue in practice, AFAICT.
Have things evolved?
var foo, bar;
({foo, bar}) = {foo: 2, bar: 3};
is a "ReferenceError: invalid assignment left-hand side" in Firefox
Nightly 51.0a2, and a "SyntaxError: Unexpected token (" in Google
Chrome 54.0.2840.90.
var foo, bar;
{foo, bar} = {foo: 2, bar: 3};
is a "SyntaxError: expected expression, got '='" in Firefox, and *it
works in Google Chrome*.
var extract = () => ({foo:1, bar:2});
var foo, bar;
{foo, bar} = extract(); // SyntaxError: expected expression, got
'=' in Firefox and Chrome
({foo, bar}) = extract(); // ReferenceError: invalid assignment
left-hand side in Firefox, SyntaxError: Unexpected token ( in Chrome
I tried figuring out what the correct behaviour is from
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-destructuring-assignment,
but the rabbit hole goes deep, so I have no idea who to file a bug
with.
(Obviously, the "right" way to do it, `({foo, bar} = extract())`,
works in both Firefox and Chrome. They, hum, could use some better
error messages, too, to guide users towards that.)
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss