Existential operator in JavaScript?

3.6k Views Asked by At

I have a large json object. I need to access x = a.b.c.d.e.f.g. However b (or c, d, e...) can be undefined. This data structure is being imported from somewhere else.

Is there a way to try to get to assign x with null or undefined without throwing an error?

2

There are 2 best solutions below

0
Bamieh On

Update

Optional chaining is now part of the ECMAScript spec and can be used on most javascript clients (browsers, node.js, etc)

x = a.b?.c?.d?.e?.f?.g

To use a default value if the access fails you can use the Nullish coalescing operator (??)

x = a.b?.c?.d?.e?.f?.g ?? 'my default value'

original answer (2017)

The easiest way is to use try catch

try {
  x = a.b.c.d.e.f.g
} catch(e) {
  x = undefined;
}

There is a proposal for this called optional chaining you can check it here: https://github.com/tc39/proposal-optional-chaining

x = a.b?.c?.d?.e?.f?.g

If you are using a transpiler you'll be able to use it, however its still in the very early stages and might not be accepted to be supported in the spec

0
Jonas Wilms On

There are some proposals to solve this ( syntactic sugar missing) problem. Hopefully somewhen we may do this:

let x = a?.b?.c?.d?.e;

However, until then we need to fall back to objects if the variable is undefined:

var x =( ( ( ( (a || {}).b || {} ) || {} ).c || {} ).d || {}).e;

I admit that this is quite ugly. Maybe object destructuring is more beautiful:

let ({ 
   b: { 
     c: { 
       d: { e:x } = {}
     } = {}
   } = {}
}) = a;