Экзистенциальный оператор в JavaScript?

У меня есть большой объект JSON. Мне нужен доступ x = a.b.c.d.e.f.g, тем не мение b (или же c, d, e...) может быть неопределенным. Эта структура данных импортируется откуда-то еще.

Есть ли способ попытаться получить назначение x с null или же undefined не выбрасывая ошибку?

2 ответа

Самый простой способ - это использовать try catch

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

Есть предложение для этого называется optional chaining Вы можете проверить это здесь: https://github.com/tc39/proposal-optional-chaining

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

Если вы используете транспортер, вы сможете его использовать, однако он все еще находится на очень ранних стадиях и может быть не принят в спецификации.

Есть несколько предложений по решению этой проблемы (отсутствие синтаксического сахара). Надеюсь, когда-нибудь мы сможем сделать это:

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

Однако до тех пор, пока нам не понадобится переменная, мы должны вернуться к объектам:

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

Я признаю, что это довольно некрасиво. Может быть, деструктура объекта красивее:

let ({ 
   b: { 
     c: { 
       d: { e:x } = {}
     } = {}
   } = {}
}) = a;
Другие вопросы по тегам