Normative: Support optional chain in LHS of assignment #4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation: https://gist.github.com/nicolo-ribaudo/d264e424b618e7deaeca1d6e4f16a7c0
Description of the changes:
expr1?.b.c = expr2
is equivalent toexpr1 == null ? undefined : (expr1.b.c = expr2)
if (expr1) expr1.b.c = expr2;
.expr1?.b.c += expr2
is equivalent toexpr1 == null ? undefined : (expr1.b.c += expr2)
expr1?.b.c ??= expr2
is equivalent toexpr1 == null ? undefined : (expr1.b.c ??= expr2)
(a?.b) = c
throws for nullisha
, similarly to how(a?.b).c
throws for nullisha
.++expr1?.b.c
, equivalent toexpr1 == null ? undefined : ++expr1.c.d
, would be very confusing, because the++
operator can be skipped depending on an optional chain that appears after it. As such, it is still disallowed.expr1?.c.b++
is still disallowed, even if it doesn't have the same problem.{ x: expr1?.b.c } = obj
it's not clear if theobj.x
getter should be triggered or not.for (expr1?.c.d of arr)
, because it wouldn't short-circuit the evaluation ofarr
5.1, 6 and 7 are the points I'm most unsure about, open for discussion in plenary.