I don't think ||= and ??= are very difficult to define clearly.
Perhaps just a line each in terms of the expanded syntax. I don't
think they would add much bloat to engines. Perhaps just better to add
them both and move on to discussing classes, lambdas, or processes.


a ||= b;
a = a || b;

a ??= b;
a = a === undefined ? b : a;



And in this syntax will default values be used if the parameter is
falsey or only if it is undefined?

Only if the actual parameter is absent.

Well that is more useful than the ||= or ??= idioms at the top of the
function body anyway. Someone passing the value "undefined" to a
function causes problems for the idioms.

Someone may want to still use the ||= or ??= idioms for testing
properties inside an object passed to the function. I do that when the
last parameter to a function is a bunch of different named optional
parameters. Unfortunately simple idiom tests for properties inside an
object could still be fooled if someone sets a property to
"undefined".

If someone calls myFunc({option: undefined}) I assume the meant to explicitly pass an undefined value. The correct idiom for testing this would be

var opt = "option" in arg ? arg.option : "default";

But this is a fairly rare usage.

Perl has has ||= for a long time (or-equals: var a = a || a_default) and Perl 5 v10 added the defined-or-equal '//=' and defined-or '//' operators. I'm not a huge fan of the sigil chosen for perl mind:

  $foo //= "default";
  $foo = defined $foo ? $foo : "default";

You could make a case for adding a ?? operator for symmetry. Example of usage:

some_func(a, b ?? "c" );

P.S. Appolgies to anyone who got a copy of this directly. I sent it to the list from the wrong address previously. _______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to