Иногда вашему коду для запуска требуется массив. Независимо от того, насколько длинный или пустой массив, вам просто нужно продолжать работать.

Все идет нормально.
Но давайте предположим, что ваш массив поступает с внешнего сервера, и вы не можете его контролировать. Кроме того, и Малала, и Абий заняты на встрече нобелевских лауреатов и не могут прийти к вам. Что будет с вашим кодом?

Ага, undefined. И если другие функции зависят от whoIsComing, ваш код ломается.

Failed with exception:  TypeError: Cannot read property 'XXX' of undefined

Как вы можете исправить это, чтобы ваш код все равно продолжал работать?

Подтвердите свой массив

Хорошим решением является проверка входных данных, которые вы получаете, прежде чем обрабатывать их. (Это, по сути, общее правило!) В данном случае попробуем сэкономить время: Если придут гости, запустим нашу функцию whoIsComing, иначе выведем грустное сообщение:

Если вы не знакомы с приведенным выше синтаксисом, это то же самое, что:

if (names[0] === true) {
   whoIsComing(names);
   } else {
      console.log("Sorry, they are all busy :(")
      }

С помощью этого небольшого трюка ваш код будет продолжать работать, даже если ваш массив пуст:

Мягкая мелочь:

Почему это сработало?
Вернемся к коду из примера 2. JavaScript понимает пустой массив как истинный. Когда JavaScript выполнит нашу функцию, он попытается манипулировать массивом, и на выходе будет undefined. В логическом контексте names возвращает true, а names[0] возвращает false.

Вот почему мы использовали names[0] для проверки нашего массива. Если Малала решит появиться, ее имя будет сохранено в names[0], и эта оценка вернет true. Если никто не появится и в нашем массиве не будет сохранено ни одного имени, то names[0] будет пустым и вернет false. Если мы заставим нашу функцию возвращать логическое значение, мы можем продолжать выполнять код без дальнейших церемоний.

Изменить: более элегантное решение

После того, как я опубликовал этот пост, я узнал о более элегантном решении. Вместо использования names[0] для проверки вашего массива вы можете использовать names.lenght с тем же результатом:

Как вы использовали это в реальной жизни?

Вот код, в котором я использовал это решение.

AWS отправляет мне событие, которое запускает мой код. Из этого события я извлекаю несколько данных, например, имя создателя ресурса (ownerName), номер аккаунта и так далее. Однако не все события показывают имя владельца, и data.Items[0] покажет пустой массив.

(...)
const item = data.Items[0];
const ownerName = item ? item.userID : "unknown";
if (!item) {
    console.info(`No user found in the database`);
    return {
      resourceID,
      ownerName
      };
 } else {
    return { resourceID, ownerName, ...item };
   }

В приведенном выше коде, если массив data.Items пуст, мой код больше не будет ломаться. Вместо этого он пометит владельца определенного ресурса как unknown. Это было не то, что я имел в виду для своего кода, но в итоге он оказался лучше, чем я его изначально разработал.

Надеюсь, это может быть полезно для вас :)