> Le 5 févr. 2016 à 16:22, Kevin Smith <[email protected]> a écrit :
>
> Yes: the `?.` operator does not change the meaning of the subsequent `.`
> operator. I like to think of it as: the effect is local (short-circuiting
> aside), you are not switching between "modes". It’s a feature.
>
> Just curious: what's the rationale for that behavior, as opposed to "deep"
> short-circuiting? It seems like if I have a long query, like:
>
> a.b.c.d
>
> I think I would typically want to test that the whole query is satisfiable
> (not just a single term), so I'll need to write:
>
> a?.b?.c?.d
>
(In order to avoid confusion from those that read casually that thread, I
recall that the proposal already features "long" short-circuiting in the sense
that the end point of the short-circuiting jump is the end of the entire chain
of property accesses, method calls, etc. The issue here is essentially whether
a `?.` should implicitly transform all subsequent `.` in the chain into `?.`.)
The general rationale is, as I've said, no modes, because modes are confusing.
In the particular case, there should be testimonies that the pattern
`a?.b?.c?.d` is both sufficiently common and annoying in order to consider an
exception to that rule.
But here is a random example, where I would not use stacked `?.` or something
semantically equivalent:
```js
var numberOfSelectedItems =
myForm.querySelector('select[name=foo]')?.selectedOptions.length || 0;
```
In case `myForm.querySelector('select[name=foo]')` is not null, then
`myForm.querySelector('select[name=foo]').selectedOptions` is always an
HTMLCollection and has always a `length` property. If it is not the case, then
either I made a typo, or I am testing some ancient browser that doesn’t support
yet the `selectedOptions` property. In both cases, I want an exception to be
thrown rather than an error to be dropped: it's easier to debug.
—Claude
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss