JS: Объекты
Теория: Вложенные объекты
Значением свойства объекта может быть всё, что угодно, включая другой объект или массив:
Все то же самое можно определить сразу при создании объекта:
В этом случае обращение к вложенным элементам происходит по цепочке:
Печать на экран
В console.log() встроено одно ограничение. Если в объекте есть другие объекты на глубине больше второго уровня вложенности, то при выводе такого объекта на экран вместо объектов отобразится строка [Object], а вместо массива — [Array].
Для вывода таких объектов можно воспользоваться функцией преобразования в JSON:
Проверки в глубину
При работе с вложенными объектами резко усложняется задача проверки существования ключей. Приходится строить цепочку из условий до нужного свойства. Представьте, что нам нужно добраться до 4 уровня вложенности и мы не уверены в том, что существуют все промежуточные объекты:
Так будет выглядеть решение в лоб. Однако, есть более удобный способ, речь о котором ниже.
Оператор опциональной последовательности
Если задача состоит в том, чтобы извлечь данные, а не просто проверить их существование, то можно пойти другим путем. В Javascript встроен оператор опциональной последовательности (optional chaining), который позволяет извлекать вложенные данные без проверок:
Этот оператор никогда не приводит к ошибке. Он работает на любых типах данных и всегда возвращает либо undefined, либо значение указанного свойства, если оно существует.
Оператор не меняет общий подход работы с ключами в объектах. Этот же пример с динамическим ключом:
Оператор нулевого слияния
С помощью оператора нулевого слияния, можно не только получить значение цепочки любой вложенности, но и определить значение по умолчанию для него.
Значение по умолчанию возвращается только в том случае, когда слева undefined или null. В этом смысле данный оператор совсем не похож на логическое сравнение ||:
get (lodash)
Пример выше перегружен символами и выглядит достаточно сложно. Как альтернативу можно использовать функцию get() библиотеки Lodash.
get() особенно удобен в случае динамических ключей. В таком случае вторым аргументом можно передать массив ключей:




