¡Ten cuidado!
Lo que debería activar inmediatamente las alarmas es la primera línea: var month = '';
- ¿por qué esta variable se inicializa en una cadena vacía, en lugar de null
oundefined
? Puede que haya sido un hábito o un código copiado / pegado, pero a menos que lo sepa con certeza, no es seguro ignorarlo cuando esté refactorizando el código.
Si usa una matriz de nombres de meses y cambia su código a var month = months[mm-1];
, está cambiando el comportamiento, porque ahora para números fuera del rango, o valores no numéricos, month
seránundefined
. Puede que sepa que esto está bien, pero hay muchas situaciones en las que esto sería malo.
Por ejemplo, digamos que switch
está en una función monthToName(mm)
y alguien llama a su función de esta manera:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Ahora, si cambia a usar una matriz y regresa monthName[mm-1]
, el código de llamada ya no funcionará como undefined
se esperaba y enviará valores cuando se supone que debe mostrar una advertencia. No digo que esto sea bueno código, pero a menos que sepa exactamente cómo se usa el código, no puede hacer suposiciones.
O tal vez la inicialización original estaba allí porque algún código más adelante en la línea asume que month
siempre será una cadena, y hace algo comomonth.length
: esto resultará en una excepción para meses inválidos y potencialmente matará el script de llamada por completo.
Si haces saber todo el contexto - por ejemplo, que es todo su propio código, y nadie más es cada vez va a utilizarlo, y confiar en sí mismos no olvidemos que hizo el algún cambio en el futuro - puede ser seguro para cambiar el comportamiento como este, pero muchos errores provienen de este tipo de suposición de que en la vida real es mucho mejor programar a la defensiva y / o documentar el comportamiento a fondo.
La respuesta de Wasmoo lo hace bien (EDITAR: varias otras respuestas, incluida la aceptada, ahora también se han solucionado) : puede usar months[mm-1] || ''
o si prefiere que sea más obvio de un vistazo lo que está sucediendo, 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
}