Destructuring object outside of var declaration

Thaddee Tyl thaddee.tyl at
Sun Nov 13 18:28:37 UTC 2016

On Tue, Sep 17, 2013 at 4:27 PM, Brendan Eich <brendan at> wrote:
>> Nathan Wall <mailto:nathan.wall at>
>> 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,
but the rabbit hole goes deep, so I have no idea who to file a bug

(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.)

More information about the es-discuss mailing list