Seja cuidadoso!
O que deve disparar imediatamente o alarme é a primeira linha: var month = '';
- por que essa variável está sendo inicializada com uma string vazia, em vez de null
ou undefined
? Pode ter sido apenas um hábito ou código copiado / colado, mas a menos que você saiba com certeza, não é seguro ignorá-lo quando estiver refatorando o código.
Se você usar uma matriz de nomes de meses e alterar seu código para, var month = months[mm-1];
você está mudando o comportamento, porque agora para números fora do intervalo, ou valores não numéricos, month
estarão undefined
. Você pode saber que isso é ok, mas existem muitas situações em que isso seria ruim.
Por exemplo, digamos que você switch
esteja em uma função monthToName(mm)
e alguém a esteja chamando assim:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Agora, se você mudar para usar uma matriz e retornar monthName[mm-1]
, o código de chamada não funcionará mais como pretendido e enviará undefined
valores quando for para exibir um aviso. Não estou dizendo que este é um bom código, mas a menos que você saiba exatamente como o código está sendo usado, você não pode fazer suposições.
Ou talvez a inicialização original estivesse lá porque algum código mais abaixo na linha assume que month
sempre será uma string e faz algo como month.length
- isso resultará em uma exceção sendo lançada para meses inválidos e potencialmente matar o script de chamada completamente.
Se você fazer conhecer todo o contexto - por exemplo, é tudo seu próprio código, e mais ninguém nunca vai usá-lo, e você confiar em si mesmo não se esqueça que você fez a algum mudança no futuro - pode ser seguro para alterar o comportamento assim, mas muitos bugs vêm desse tipo de suposição de que na vida real é muito melhor programar defensivamente e / ou documentar o comportamento por completo.
A resposta de Wasmoo acertou (EDITAR: várias outras respostas, incluindo a aceita, também foram corrigidas) - você pode usar months[mm-1] || ''
ou, se preferir, deixar mais óbvio o que está acontecendo, algo como:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}