||= is much needed?

Brendan Eich brendan at mozilla.com
Thu Jun 14 11:01:54 PDT 2012

Allen Wirfs-Brock wrote:
> While I'm less than enthusiastic about explicitly provided undefined values triggering default value usages, I don't think it is particularly harmful.  I think treating null equivalently would be.

Noted, but you have not responded to the argument, made by Sam 
Tobin-Hochstadt based on Racket experience, Tab Atkins in Common Lisp, 
and others, that failing to treat explicit undefined as a defaulting 
trigger creates an anti-modular, combinatorial explosion when wrapping 
and delegating. This is the sole reason undefined (or undefined and 
null, separate issue) as defaulting trigger is proposed. Please respond 
to it directly.

>> >  
>> >  f = (x, y=1, z=2) ->  console.log(x, y, z)
>> >  f(0, null, undefined)
>> >  
>> >  generates
>> >  
>> >    f = function(x, y, z) {
>> >      if (y == null) {
>> >        y = 1;
>> >      }
>> >      if (z == null) {
>> >        z = 2;
>> >      }
>> >      return console.log(x, y, z);
>> >    };
>> >  
>> >    f(0, null, void 0);
>> >  
>> >  We could certainly do worse than to pave this cowpath.
> sure, for example, by having any falsy value trigger default value usage.  But just because there are worse things doesn't make the a good idea.
That's a reductio ad absurdum, nothing to do with why I wrote what I wrote.

We have a problem with || indeed. The question is whether the solution 
should equate null and undefined. CoffeeScript chose the 
conceal-the-difference path and it has users. The users who want null to 
be distinct from undefined are neither CoffeeScript users, nor || users 
(in their defaulting code). They must be doing === undefined test. That 
is rare too (not quite as rare as passing null instead of undefined as 
intentional default trigger in my experience).

What is your reason for preferring === undefined over == null, since we 
have a dilemma and users often use an even looser (falsy, viz ||) test 
than == null, but some use == null and others use === undefined, for the 
defaulting trigger?


More information about the es-discuss mailing list