5

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?

1

2 Answers 2

7

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

Sign up to request clarification or add additional context in comments.

Comments

4

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;

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.