Optional assignment operator
Jacob Pratt
jhprattdev at gmail.com
Thu Jul 5 20:53:07 UTC 2018
This idea isn't quite the same as ||=, as that includes any falsey value,
nor ??=, as that includes null. My thought was to be able to set a property
if there is a value that exists (which would include null, but not
undefined).
It's certainly similar — should this be considered for addition to that
existing proposal?
My thinking was along the lines of "Set this if there is something to set.
If not, just keep going". It can be done with an if statement, but would
require a temporary reference due to getters and/or method calls.
jhpratt
On Thu, Jul 5, 2018 at 3:08 AM, Isiah Meadows <isiahmeadows at gmail.com>
wrote:
> How about you all take a look here:
> https://github.com/tc39/proposal-logical-assignment
>
> Originally, it was at
> <https://github.com/tc39/proposal-nullish-coalescing>, but here
> <https://github.com/tc39/proposal-nullish-coalescing/issues/1>, it was
> discussed and pushed off to the logical assignment proposal as it was
> also a short-circuiting operator, even though it wasn't really a
> *boolean* operator.
>
> -----
>
> Isiah Meadows
> me at isiahmeadows.com
> www.isiahmeadows.com
>
>
> On Wed, Jul 4, 2018 at 10:25 PM, Sam Ruby <rubys at intertwingly.net> wrote:
> > 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
> > _______________________________________________
> > 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/20180705/801f234a/attachment.html>
More information about the es-discuss
mailing list