Optional assignment operator

Jacob Pratt jhprattdev at gmail.com
Thu Jul 5 00:41:58 UTC 2018


Sure, you'd be making an assignment no matter what in that case, which
would unnecessarily trigger the setter, possibly causing side effects.

```
const obj = {
  get x() {
    return _x;
  },

  set x(value) {
    console.log('setter called');
    _x = value;
  },

  demo(params = {}) {
    ({ x: this.x = this.x } = params);
  },
};

obj.demo({ x: 5 });
obj.demo({ x: undefined });
```

This will log twice, where it only needs to trigger it once.

jhpratt

On Wed, Jul 4, 2018 at 8:16 PM, Darien Valentine <valentinium at gmail.com>
wrote:

> > My thought was to have the following: this.foo ?= params?.foo; which can
> be desugared to if (($ref = params?.foo) !== undefined) { this.foo = $ref; }
>
> Are there any specific advantages to the new syntax you’re describing?
> Initially, it appears to me like a less powerful form of an existing
> syntactic feature — default initializers and binding patterns allow
> expressing the same logic:
>
> ```
> const obj = {
>   demo(params={}) {
>     ({ foo: this.foo=this.foo } = params);
>
>     console.log(
>       `params was ${ JSON.stringify(params) }; ` +
>       `this.foo is now ${ JSON.stringify(this.foo) }`
>     );
>   }
> }
>
> obj.demo({ foo: 1 });
> obj.demo({})
> obj.demo({ foo: 2 });
> obj.demo();
> obj.demo({ foo: 3 });
> obj.demo({});
> ```
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180704/1a900c7d/attachment.html>


More information about the es-discuss mailing list