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 null
lub 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 month
bę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 switch
jest 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 undefined
wartoś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 month
zawsze 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
}