Экзистенциальный оператор в 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;