Bądź ostrożny!
To, co powinno natychmiast wywołać dzwonki alarmowe, to pierwsza linia: var month = '';- dlaczego ta zmienna jest inicjalizowana jako pusty łańcuch, a nie nulllub undefined? Być może był to po prostu nawyk lub kopiowanie / wklejanie kodu, ale jeśli nie wiesz tego na pewno, nie jest bezpiecznie ignorować go podczas refaktoryzacji kodu.
Jeśli używasz tablicy nazw miesięcy i zmienisz swój kod var month = months[mm-1];, zmieniasz zachowanie, ponieważ teraz dla liczb spoza zakresu lub wartości nienumerycznych monthbędzie undefined. Możesz wiedzieć, że to jest w porządku, ale jest wiele sytuacji, w których byłoby to złe.
Na przykład, powiedzmy, że twoja switchjest w funkcji monthToName(mm), a ktoś wywołuje twoją funkcję w ten sposób:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Teraz, jeśli zmienisz na używanie tablicy i zwrócisz monthName[mm-1], kod wywołujący nie będzie już działał zgodnie z przeznaczeniem i prześle undefinedwartości, gdy ma wyświetlić ostrzeżenie. Nie twierdzę, że to dobry kod, ale jeśli nie wiesz dokładnie, jak kod jest używany, nie możesz robić założeń.
A może oryginalna inicjalizacja była tam, ponieważ jakiś kod w dalszej części linii zakłada, że monthzawsze będzie to ciąg, i robi coś w rodzajumonth.length - spowoduje to wyrzucenie wyjątku dla nieprawidłowych miesięcy i potencjalnie całkowicie zabije skrypt wywołujący.
Jeśli zrobić znać cały kontekst - np to wszystko swój własny kod, a nikt inny kiedykolwiek będzie go używać, i ufasz sobie nie zapomnieć dokonaniu kiedyś zmieni się w przyszłości - może być bezpieczny, aby zmienić zachowanie w ten sposób, ale bardzo wiele błędów wynika z tego rodzaju założenia, że w prawdziwym życiu znacznie lepiej jest programować defensywnie i / lub dokładnie dokumentować zachowanie.
Odpowiedź Wasmoo ma rację (EDYTUJ: kilka innych odpowiedzi, w tym zaakceptowana, również zostało naprawionych) - możesz użyć months[mm-1] || ''lub jeśli wolisz, aby było bardziej oczywiste na pierwszy rzut oka, co się dzieje, na przykład:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}