Быть осторожен!
То, что должно немедленно вызвать тревогу, - это первая строка: 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 дает все правильно (РЕДАКТИРОВАТЬ: ряд других ответов, включая принятый, теперь тоже исправлен) - вы можете использовать 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
}