Hi,
(I separate it from recent thread on shared handlers for proxies).
The existential operator is a syntactic sugar to avoid long testing
whether a property exists and only after that to apply it. This already
is again used in CoffeeScript, so I'll show the examples:
let street = user.address?.street
which desugars e.g. into:
street = (typeof user.address != "undefined" && user.address != null)
? user.address.street
: undefined;
The same with functions (which is even more convenient that just with
properties):
let value = entity.getBounds?().direction?.x
which desugars into:
let x = (typeof entity.getBounds == "function")
? (typeof entity.getBounds().direction != "undefined" &&
entity.getBounds().direction != null)
? entity.getBounds().direction.x
: undefined
undefined;
(I specially avoid optimization with saving intermediate results -- just
to keep clarity)
I think it's useful thing and I already used in several times. Do we
need it in ES6? It's convenient.
Another examples (which already as I know were planed for ES6, such as
||= or ?=, etc):
score ?= 0
desugars into (notice, there's no unnecessary assignment as in score =
score || 0; also, this sugar assumes that `score` may not even exists):
(typeof score != "undefined" && score != null) : score ? (score = 0);
Normally, it can be done (assuming that `score` exists):
score || (score = 0);
so score ?= 0 is really just a sugar, no more, no less.
Dmitry.
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss