Optional assignment operator
Sam Ruby
rubys at intertwingly.net
Thu Jul 5 02:25:24 UTC 2018
On Wed, Jul 4, 2018 at 7:12 PM, Jacob Pratt <jhprattdev at gmail.com> wrote:
> I've been having this thought recently, after running across a potential use
> case in practice. There will likely be conditional accessors at some point
> in the future (with optional chaining), but there will not be conditional
> assignment.
>
> My thought was to have the following:
> this.foo ?= params?.foo;
> which can be desugared to
> if (($ref = params?.foo) !== undefined) { this.foo = $ref; }
>
> I would strictly check for undefined, rather than nullish, as anything other
> than undefined would indicate that a value is present that can be set. If no
> value is present (such as a missing key on an object), nothing would be set.
> A reference must be used for the general case, as the object being assigned
> (the RHS) could be a function or getter with side-effects.
>
> Not sure if it should be ?= or =?, as it would look somewhat odd (IMO) for
> things like ?+= or +=?.
>
> Initial thoughts?
Perl and Ruby have "||=" and "&&=" operators. They don't strictly
check for undefined in either language.
These operators are frequently used (in particular, "||="). I do miss them.
Looking at the node.js source:
$ find . -name '*.js' -type f | xargs egrep ' (\S+) = \1 \|\| ' | wc -l
1416
$ find . -name '*.js' -type f | xargs egrep ' if \(!(\S+)\) \1 = ' | wc -l
497
Nearly 2K occurrences in one code base.
> Jacob Pratt
- Sam Ruby
More information about the es-discuss
mailing list