Stai attento!
La cosa che dovrebbe immediatamente attivare i campanelli d'allarme è la prima riga: var month = '';
- perché questa variabile viene inizializzata su una stringa vuota, anziché null
o undefined
? Potrebbe essere stata solo un'abitudine o un codice copiato / incollato, ma a meno che tu non lo sappia per certo, non è sicuro ignorarlo quando esegui il refactoring del codice.
Se utilizzi un array di nomi di mesi e modifichi il codice, var month = months[mm-1];
stai modificando il comportamento, perché ora per i numeri al di fuori dell'intervallo, o i valori non numerici, month
sarannoundefined
. Potresti sapere che questo è ok, ma ci sono molte situazioni in cui questo sarebbe negativo.
Ad esempio, diciamo che sei switch
in una funzione monthToName(mm)
e qualcuno sta chiamando la tua funzione in questo modo:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Ora, se si passa all'uso di un array e alla restituzione monthName[mm-1]
, il codice chiamante non funzionerà più come previsto e invierà undefined
valori quando dovrebbe visualizzare un avviso. Non sto dicendo che questo sia un buon codice, ma a meno che tu non sappia esattamente come viene utilizzato il codice, non puoi fare supposizioni.
O forse l'inizializzazione originale era lì perché un po 'di codice più in basso presume che month
sarà sempre una stringa e fa qualcosa di similemonth.length
: questo risulterà in un'eccezione generata per mesi non validi e potenzialmente ucciderà completamente lo script chiamante.
Se tu fai conoscere l'intero contesto - ad esempio, è tutto il proprio codice, e nessun altro è mai andare a usarlo, e si ritiene non te stesso dimenticare che hai fatto il cambiamento in futuro - può essere sicuro di cambiare il comportamento come questo, ma moltissimi bug derivano da questo tipo di presupposto che nella vita reale è molto meglio programmare in modo difensivo e / o documentare accuratamente il comportamento.
La risposta di Wasmoo ha ragione (EDIT: anche una serie di altre risposte, inclusa quella accettata, ora sono state corrette) : puoi usare months[mm-1] || ''
o se preferisci rendere più ovvio a colpo d'occhio cosa sta succedendo, qualcosa come:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}