Existential Operator / Null Propagation Operator

Claude Pache claude.pache at gmail.com
Thu Oct 13 21:16:22 UTC 2016


 

> Le 13 oct. 2016 à 19:20, Bob Myers <rtm at gol.com> a écrit :
> 
> 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 is not about trying to get something from null, but about taking different paths according to when a reference is null or not without needing to assign to temporary variables, writing complete `if` structures, and/or repeating oneself.

> (...)
> 
> 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 problem.

You can already write`a && a.b && a.b.c` in JS... but you still have to repeat `a` thrice and`b` twice, which is an issue if `a` and `b` are complex or lengthy expressions. Sometimes I am tempted to write something in the lines of `(_ = a.b) && _.c` in order to avoid the issue, but it is less readable.

Here is a more complex although somewhat contrived example: If an <input> element named "foo" is inside a <details> section, open the latter in order to reveal the former:

```js
document.querySelector("input[name=foo]")?.closest(".details")?.open = true
```

(The short-circuiting mechanism, which is an important part of the semantics in my proposal, ensures that the assignment is performed only when the expressions just before the `?`s are not null/undefined.)

—Claude


More information about the es-discuss mailing list