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

Хорошо, народ! Время пристегнуться и пристегнуться для деструктивных махинаций! Во-первых, давайте начнем с основ. Полюбуйтесь на этот изящный маленький фрагмент кода, который вот-вот извлечет одну опору, как босс!

const game = {
  game_id: 12,
  game_name: 'Call of Duty',
  version: 1.2,
  players: '3.2M'
};

const {game_id, game_name, version, players} = game;
console.log(game_name);

это зарегистрирует название игры.

Вот еще одна иллюстрация извлечения свойства, которое влечет за собой присвоение ему отдельного имени переменной.

const player = {
  player_id: 485,
  player_name: 'Tony Stark'
};

const {player_name: name} = player;
console.log(name);

это зарегистрирует имя игрока с псевдонимом.

Теперь давайте сделаем это с вложенными объектами.

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

Что ж, ребята, если вы думали, что деструктурирование подходит только для простых старых объектов, вас ждет угощение! Приготовьтесь к путешествию в дикий мир вложенных объектов, где безраздельно царит разрушение, а у его ног дрожит хаос. Верно, друзья мои, мы вот-вот станем свидетелями волшебства деструктурирования, поскольку оно берет на себя сложнейшую задачу распутывания хитросплетений вложенных объектов. Вы готовы? Давай сделаем это!

const game = {
 game_id: 12,
 game_name: 'Call of Duty',
 version: 1.2,
 players: '3.2M',
 player: {
   player_id: 485,
   player_name: 'Tony Stark'
 }
};
const {player: {player_name, player_id}} = game;

console.log(player_name);

это зарегистрирует имя игрока.

В случае отсутствия вложенного объекта, каковы последствия?

const game = {
 game_id: 12,
 game_name: 'Call of Duty',
 version: 1.2,
 players: '3.2M'
};

const {player: {player_name}} = game;
console.log(player_name);

Это выдаст -> Uncaught TypeError: Невозможно прочитать свойства неопределенного (чтение «player_name»)

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

const game = {
 game_id: 12,
 game_name: 'Call of Duty',
 version: 1.2,
 players: '3.2M'
};

const {player: {player_name} = {}} = game;
console.log(player_name);

Это будет регистрировать неопределенное

А что происходит, когда вы еще глубже копаетесь в кроличьей норе вложенных объектов?

const game = {
 game_id: 12,
 game_name: 'Call of Duty',
 version: 1.2,
 players: '3.2M'
};

const {player: {stats: {total_games}} = {}} = game;

Одним из возможных подходов к решению этой проблемы является включение дополнительных значений по умолчанию по мере необходимости. Тем не менее, что делает этот сценарий особенно увлекательным, так это то, что есть несколько решений, которые необходимо изучить.

const game = {
 game_id: 12,
 game_name: 'Call of Duty',
 version: 1.2,
 players: '3.2M'
};

const {player: {stats: {total_games} = {}} = {}} = game;
console.log(total_games);

Другое потенциальное решение включает расширение значения по умолчанию для поля «игрок».

const game = {
 game_id: 12,
 game_name: 'Call of Duty',
 version: 1.2,
 players: '3.2M'
};

const {player: {stats: {total_games}} = {stats: {}}} = game;
console.log(total_games);

Выбор решения для реализации зависит от конкретного контекста и вероятности определенных сценариев. Например, если более вероятно, что отдельные поля во вложенном объекте будут отсутствовать, оптимальным выбором может быть добавление значений по умолчанию для этих полей. С другой стороны, если чаще всего отсутствуют целые вложенные объекты, расширение значения по умолчанию для поля «игрок» может быть лучшим подходом.