Правильно ли в Node.js, если вы завершаете последовательность опциональных значений выражением ” ?? null”, вы получите либо значение, либо null? (т.е. избегая undefined)

Вопрос или проблема

Предположим, у вас есть очень большой json -> объект, такой как

const cc = stuff.galaxies[13].stars[2099].planets["Jingo"].cities

Я смешал как массивы, так и именованные json.

Конечно, некоторого элемента может не быть по пути.

Я, как правило, делаю так:

const cc = stuff.galaxies?[13]?.stars?[2099]?.planets?["Jingo"]?.cities ?? null

Это, похоже, работает, в результате чего cc будет (в этом примере) массивом “городов”, или null. (Без “undefined”).

Или другой пример может быть таким:

const j = stuff.galaxies?[13]?.stars?[2099]?.planets?["Jingo"] ?? null

Это правильно? Спасибо. Довольно сложно знать все детали опциональных свойств в Node, если вы не являетесь настоящим экспертом по Node.

Да, ваше использование опциональной цепочки (?.) и операторов объединения с нулем (??) правильно!

Опциональная цепочка позволяет вам безопасно получать доступ к глубоко вложенным свойствам, не сталкиваясь с ошибками, если какая-либо часть цепочки undefined или null. Если какая-либо часть отсутствует, возвращается undefined, а оператор объединения с нулем затем гарантирует, что если результат undefined, то cc (или j) будет установлен в null.

Так что в ваших примерах:

const cc = stuff.galaxies?.[13]?.stars?.[2099]?.planets?.["Jingo"]?.cities ?? null;
const j = stuff.galaxies?.[13]?.stars?.[2099]?.planets?.["Jingo"] ?? null;

Оба будут работать так, как вы планировали. Если какое-либо свойство будет отсутствовать, cc или j будет null, что предотвращает возникновение значений undefined. Это делает ваш код намного более безопасным и чистым при работе со сложными вложенными структурами!

Ответ или решение

Да, ваше использование опциональной цепочки (оператора ?.) и оператора нулевого слияния (оператора ??) абсолютно корректно!

Опциональная цепочка позволяет безопасно получать доступ к глубоко вложенным свойствам, не сталкиваясь с ошибками, если какая-либо часть цепочки является undefined или null. Если на каком-то уровне отсутствует значение, оператор ?. вернет undefined, а оператор нулевого слияния затем обеспечит, чтобы если результат был undefined, переменные cc или j были присвоены значение null.

В ваших примерах:

const cc = stuff.galaxies?.[13]?.stars?.[2099]?.planets?.["Jingo"]?.cities ?? null;
const j = stuff.galaxies?.[13]?.stars?.[2099]?.planets?.["Jingo"] ?? null;

Оба варианта будут работать так, как вы задумали. Если любое свойство в цепочке будет отсутствовать, то cc или j будут равны null, что позволяет избежать любых значений undefined. Это значительно улучшает безопасность и читаемость вашего кода при работе с глубоко вложенными структурами данных.

Таким образом, подход, который вы используете, обеспечивает надежность и аккуратность кода, особенно при работе с большими и сложными JSON-объектами, где вероятность отсутствующих значений высока.

Оцените материал
Добавить комментарий

Капча загружается...