What about a more generic operator that would be able to silently absorb any error?

    let greedy = obj.hints?.greedy;

would become:

    let greedy = silent obj.hints.greedy;

The semantic would be exactly the same.
The syntax is up to debate. Specifically, it would be nice to be able to silence a part of an expression.
What about a 'try' without a catch?

    let greedy = try obj.hints.greedy
    let greedy = try{ obj.hints.greedy } || 22;

This is currently forbidden (I think for 2 reasons, one being that a try must be followed by a catch or finally and the other that try/catch cannot be used as expressions)

This idea is partly inspired by typeof which silences ReferenceErrors, which I see as a feature YMMV. It is also intended to make programs potentially more robust more easily. For instance, JSON.stringify can throw errors in the rare case of cyclic references. But very few people know that. To make a robust program using JSON.stringify, one would just need to turn:

    let s = JSON.stringify(o)

into

    let s = try{ JSON.stringify(o) } || DEFAULT_VALUE;

instead of the current:

    let s;
    try{
        s = JSON.stringify(o)
    }
    catch(e){
        // I don't care about the error anyway
        s = DEFAULT_VALUE;
    }

David

Le 18/06/2012 07:11, Brendan Eich a écrit :
Sorry, meant to start a new thread for:

http://wiki.ecmascript.org/doku.php?id=strawman:existential_operator

As the Syntax section hints, we can't also adopt CoffeeScript's ?( variant, which enables foo.bar?(args, go, here).baz and the like. The C syntax heritage prevails.

/be

Brendan Eich wrote:
David Herman wrote:
On Jun 15, 2012, at 5:57 PM, satyr wrote:

On Sat, Jun 16, 2012 at 4:33 AM, David Herman <dher...@mozilla.com <mailto:dher...@mozilla.com>> wrote:

    As for null, I can see how there's confusion about whether to use
    null vs undefined, and so I can see why CoffeeScript would just
    try to blur the distinction between them.


Not just for blurring. Rejecting `null` is essential for CoffeeScript's "existence" due to `?.`, the soak/safe access operator.

I think you could make a case for ?. defaulting for both but ?? defaulting only undefined. The case goes something like this:

- The purpose of ?? is to provide a default value when no value was provided. The way to say "no value" in JavaScript is undefined.

- The purpose of ?. is to fail soft when doing a property lookup. Both null and undefined throw when doing a property lookup.

Agreed. This is one choice, it's plausible because of the distinction between defaulting (which requires intentional passing of a "please default" sentinel value, or not passing a trailing actual argument) and soaking up null-or-undefined.

Yes, we could make ?? and ??= do the same for null as for undefined. I'm not sure that's the right choice, but it's a choice. For foo.bar?.baz, though, the clearer choice is to avoid throwing, which means evaluating to undefined if foo.bar is missing (evaluates to undefined) *or* has a value not coercible to object type (null or undefined). See

http://wiki.ecmascript.org/doku.php?id=strawman:existential_operator

/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to