Faites attention!
La chose qui devrait immédiatement déclencher des sonneries d'alarme est la première ligne: var month = '';
- pourquoi cette variable est-elle initialisée à une chaîne vide, plutôt que null
ou undefined
? Il peut s'agir simplement d'une habitude ou d'un copier / coller de code, mais à moins que vous ne le sachiez avec certitude, il n'est pas prudent de l'ignorer lorsque vous refactorisez du code.
Si vous utilisez un tableau de noms de mois et que vous modifiez votre code, var month = months[mm-1];
vous modifiez le comportement, car maintenant pour les nombres en dehors de la plage, ou les valeurs non numériques, month
seraundefined
. Vous savez peut-être que c'est correct, mais il y a de nombreuses situations où ce serait mauvais.
Par exemple, disons que vous switch
êtes dans une fonction monthToName(mm)
et que quelqu'un appelle votre fonction comme ceci:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Maintenant, si vous passez à l'utilisation d'un tableau et au retour monthName[mm-1]
, le code d'appel ne fonctionnera plus comme prévu et il soumettra des undefined
valeurs lorsqu'il est censé afficher un avertissement. Je ne dis pas que c'est un bon code, mais à moins que vous ne sachiez exactement comment le code est utilisé, vous ne pouvez pas faire d'hypothèses.
Ou peut-être que l'initialisation d'origine était là parce que du code plus loin dans la ligne suppose que ce month
sera toujours une chaîne et fait quelque chose commemonth.length
- cela entraînera la levée d'une exception pour des mois invalides et potentiellement tuera complètement le script appelant.
Si vous ne connaissez tout le contexte - par exemple , il est tout votre propre code, et personne d'autre ne va jamais l' utiliser, et vous vous croyez ne pas oublier que vous avez fait le quelque temps de changement dans l'avenir - il peut être sûr de changer le comportement comme ça, mais tellement de bogues proviennent de ce genre d'hypothèse que dans la vraie vie, il vaut mieux programmer de manière défensive et / ou documenter le comportement à fond.
La réponse de Wasmoo est correcte (EDIT: un certain nombre d'autres réponses, y compris celle acceptée, ont maintenant été corrigées) - vous pouvez utiliser months[mm-1] || ''
ou si vous préférez rendre plus évident en un coup d'œil ce qui se passe, quelque chose comme:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}