Будь обережний!
Перший рядок повинен негайно викликати дзвінки тривоги: var month = '';
- чому ця змінна ініціалізується у порожній рядок, а не null
чи undefined
? Це може бути просто звичка або копіювати / вставляти код, але якщо ви точно не знаєте, ігнорувати його, коли ви рефакторинг код, не безпечно.
Якщо ви використовуєте масив назв місяців і змінюєте свій код, var month = months[mm-1];
ви змінюєте поведінку, тому що тепер для чисел, що знаходяться за межами діапазону, або нечислових значень, month
це буде undefined
. Ви можете знати, що це нормально, але є багато ситуацій, коли це було б погано.
Наприклад, скажімо, що ваша switch
функція monthToName(mm)
, і хтось називає вашу функцію так:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Тепер, якщо ви перейдете на використання масиву та повернення monthName[mm-1]
, код виклику більше не буде функціонувати за призначенням, і він подаватиме undefined
значення, коли передбачається відображати попередження. Я не кажу, що це хороший код, але якщо ви точно не знаєте, як використовується код, ви не можете робити припущення.
А може, оригінальна ініціалізація була там, тому що деякий код у нижній частині рядка передбачає, що month
це завжди буде рядок, і робить щось на кшталт month.length
- це призведе до того, що виняток буде кинутий за недійсні місяці і потенційно повністю знищить викликовий скрипт.
Якщо ви робите знати весь контекст - наприклад , все це ваш власний код, і ніхто ще ніколи не збирається використовувати його, і ви довіряєте собі , не забувайте , що ви зробили зміни коли - небудь в майбутньому - це може бути безпечним , щоб змінити поведінку як це, але так багато помилок походять з такого припущення, що в реальному житті ти набагато краще програмуєш оборонно та / або ретельно документуєш поведінку.
Відповідь Wasmoo відповідає правильності (EDIT: низка інших відповідей, включаючи прийняту, тепер уже виправлена) - ви можете скористатися months[mm-1] || ''
або, якщо ви хочете, щоб це стало очевидніше з першого погляду, що відбувається, щось на кшталт:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}