ES2020 (ES11)

Another set of useful functionalities used often in MapStore from ES2020.

Optional Chaining

Shortener for null or undefined (nullish) checks, returning undefined if something is nullish in the chain.

In the example below, // if obj.attr1 doesn’t have attr2, you have an error

const obj = {
    attr1: {}
};
const a = obj.attr1.attr2.attr3;
// ERROR:
// Uncaught TypeError: Cannot read property 'attr3' of undefined

To prevent issues you usually needed to do something like this…

const a = obj.attr1 && obj.attr1.attr2 && attr1.attr2.attr3;

This method anyway has a set of issues:

  • long

  • Implicit conversion can anyway have false positive (e.g. when you have numeric or boolean values).

with optional chaining you can shorten the operation above this way:

const a = obj?.attr1?.attr2?.attr3;

it can be used for:

// object properties
obj?.prop
// object props accessed with [] operator
obj?.["expr"]
 // arrays
arr?.[1]
// functions, prevents errors if function is undefined on function call.
func?.(args)

Nullish Coalescing

Returns default values in case of nullish. Is more secure than the usual && || checks, because it works also in case of values 0 or empty strings (that are false)

const a = null;
const foo = a ?? 'default string';
console.log(foo);
// expected output: "default string"

const baz = 0 ?? 42;
console.log(baz);
// expected output: 0