Default values for nulls

Jacob Bloom mr.jacob.bloom at gmail.com
Tue Oct 13 16:01:05 UTC 2020


I'd find it more readable to allow an assignment operator, with the
semantic "do this transformation, using the passed value as the previous
value"

```
function (x ??= 123) {} // If passed null or undefined, x = 123
function (x &&= 123) {} // If passed a truthy value, x = 123
function (x += 123) {} // Regardless of type, add 123 to x
```

That said, I can see how allowing the arithmetic-assignment (and
concat-assignment) operators could lead hard-to-debug code that uses some
"I am very smart" shortcuts, so I'd opt to start with the
logical-assignment operators

On Tue, Oct 13, 2020 at 9:08 AM Naveen Chawla <naveen.chwl at gmail.com> wrote:

> What about allowing any expression then?
>
> x || 4
> x/4
> x + 4
> x + w //maybe allow only "previous" parameter values as scope
> x + a //SyntaxError: 'a' undefined in parameters scope
>
> On Tue, 13 Oct 2020 at 14:39, Michael Luder-Rosefield <
> rosyatrandom at gmail.com> wrote:
>
>> I know I am not the only one who has had several perfectly good use-cases
>> for default values disallowed, because the value coming in was `null`, not
>> `undefined`.
>>
>> I cannot be the only one who has let bugs slip in because of failing to
>> consider this case.
>>
>> So, if we can find a non-confusing and simple way to alter the spec to
>> allow for handling this, I imagine it would be considered useful and wanted.
>>
>> The obvious candidate is the nullish coalescing operator, which is
>> already part of the spec. Unfortunately, it is currently invalid to
>> indicate default values with it. I can't see any reason against changing
>> this.
>>
>> ```
>> function foo1 (x = 4) {
>>   console.log(x);
>> }
>>
>> // currently causes SyntaxError
>> function foo2 (x ?? 4) {
>>   console.log(x);
>> }
>>
>> foo1(null); // null
>> foo1(undefined) // 4
>>
>> foo2(null); // 4
>> foo2(undefined) // 4
>>
>> // currently causes SyntaxError
>> // should give x === null, y === 4
>> const { x = 2, y ?? 4 } = { x: null, y: null };
>> ```
>> --------------------------
>> Dammit babies, you've got to be kind.
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
> _______________________________________________
> 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/20201013/709ca08c/attachment.html>


More information about the es-discuss mailing list