Existential operator (was: ||= is much needed?)
jashkenas at gmail.com
Tue Jun 19 14:15:51 PDT 2012
On Tue, Jun 19, 2012 at 4:35 PM, Allen Wirfs-Brock <allen at wirfs-brock.com>wrote:
> Ah, interesting...so this is actually close to what I was advocating for
> this particular case. However, if I now understand correctly you are
> saying that
> produces undefined if fun is null/undefined but will throw if fun is
> defined as:
> fun = new Object;
> because it doesn't have have "call" property.
> Also, it isn't clear to me why the second example
> (window.method?.call(window, args)) is only guarding for null and not
> undefined. Is it only because you guard for undefined on variable
> references and not on property references?
Ha ha, loose equality strikes again! It's actually guarding for both null
and undefined. It's the only place that CoffeeScript purposefully uses the
in-all-other-cases-avoided != operator. undefined == null, right?
Ah, again. I don't think Brendan's strawman will produce that result. The
> ...?.i is going to get undefined when it does GetValue on the Reference
> produced for object.property. Then undefined.can will throw in step 5 of
> 11.2.1 because the LHS is undefined. Getting this behavior seems to
> requires modifying . as well as defining ?.
I'm afraid I can't speak to the spec language or strawman ... but the basic
idea with soaking is to short-circuit evaluation as soon as the soak fails.
In the same way that:
window || a.b.c
... won't error even if a is entirely undeclared ...
... won't error even if a is entirely undeclared.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the es-discuss