Existential Operator / Null Propagation Operator

Bob Myers rtm at gol.com
Thu Oct 13 17:20:32 UTC 2016

Why is this needed? Why are people trying to get the property of an object
which is null? Why is the object null in the first place? This can probably
be considered poor program design. It's sort of like trying to dereference
a null pointer. In addition, parameter defaults and defaults in
destructuring may make this somewhat less of an issue.

Note that TS2 is explicitly moving away from permitting null to be assigned
to something which is alleged to be an object. (Although TS2 has "stolen"
the `!` operator, it is merely a type assertion--a narrowing from `object |
null` to `object` as I understand it. It is not a run-time check.)

But let's say we nevertheless think this is an important feature. It has
been discussed at great length here. No proposal has ever had the
inevitability, generality, or intuitiveness that would allow it to gain
traction. All the proposals are essentially little syntactic hacks.

Can we find some more general extension to JS syntax that solves or
mitigates this problem as well as others? Kills two birds with one stone?
One that seems like a natural extension to current syntax, instead of an
extra magic character we stick somewhere to solve one specific problem?

Just as an example, consider the following idiom for null propagation:

a ? a.b ? a.b.c : undefined : undefined

We can leverage this pattern by allowing the `:` in the ternary operator to
be omitted (defaulting to undefined), allowing us to write:

a ? a.b ? a.b.c

Whether you love it or hate it, at least this solves more problems that
just null propagation. I'm not seriously suggesting this. I'm just saying
we need to be more creative in brainstorming possible solutions to the


On Thu, Oct 13, 2016 at 9:37 PM, Claude Pache <claude.pache at gmail.com>

> Le 13 oct. 2016 à 17:14, Kagami Rosylight <saschanaz at outlook.com> a écrit
> :
> >IIRC the proposed syntax for computed properties was x?.[y],
> Yes you’re right, sorry :/
> IMO it still seems the syntax problem is the main reason why this proposal
> has stalled. If not, what is the problem here?
> The issue with `?.[` is that it is considered as not pretty by some
> people. A syntax that is at the same time pretty, technically working, and
> not confusing is difficult to find.
> Concerning your suggestion of using `!`: From a technical point of view,
> using `![` instead of `?.[` may work only if you forbid a line terminator
> before the `!`, because the following program is valid as of today (with
> implied semicolons):
> ```js
> foo
> ![42]
> ```
> I’m curious why this proposal is not even listed in stage 0 proposal list.
> Because no representative of TC39 has volunteered to champion it.
> —Claude
> _______________________________________________
> 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/20161013/59b16bf3/attachment.html>

More information about the es-discuss mailing list