Achtung!
Das, was sofort Alarmglocken auslösen sollte, ist die erste Zeile: var month = '';
- Warum wird diese Variable mit einer leeren Zeichenfolge initialisiert und nicht mit null
oder undefined
? Möglicherweise war es nur Gewohnheit oder kopierter / eingefügter Code, aber wenn Sie das nicht sicher wissen, ist es nicht sicher, ihn zu ignorieren, wenn Sie Code umgestalten.
Wenn Sie eine Reihe von Monatsnamen verwenden und den Code ändern , um var month = months[mm-1];
das Verhalten ändern, weil jetzt Zahlen außerhalb des Bereichs, oder nicht-numerische Werte month
werdenundefined
. Sie wissen vielleicht, dass dies in Ordnung ist, aber es gibt viele Situationen, in denen dies schlecht wäre.
Nehmen wir zum Beispiel an, Sie switch
befinden sich in einer Funktion monthToName(mm)
und jemand ruft Ihre Funktion folgendermaßen auf:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Wenn Sie nun ein Array verwenden und zurückkehren monthName[mm-1]
, funktioniert der aufrufende Code nicht mehr wie beabsichtigt und sendet undefined
Werte, wenn eine Warnung angezeigt werden soll. Ich sage nicht, dass dies guter Code ist, aber wenn Sie nicht genau wissen, wie der Code verwendet wird, können Sie keine Annahmen treffen.
Oder vielleicht war die ursprüngliche Initialisierung dort, weil ein Code weiter unten davon ausgeht, dass month
es sich immer um eine Zeichenfolge handelt, und so etwas tutmonth.length
- dies führt dazu, dass eine Ausnahme für ungültige Monate ausgelöst wird und das aufrufende Skript möglicherweise vollständig beendet wird.
Wenn Sie tun , den gesamten Kontext kennen - zB es ist alles Ihren eigenen Code, und sonst niemand wird es jemals nicht benutzen wollen, und Sie vertrauen sich nicht vergessen Sie die Änderung in der Zukunft gemacht - es kann sicher sein , das Verhalten zu ändern so, aber soooo viele Fehler kommen von dieser Art der Annahme, dass es im wirklichen Leben weitaus besser ist, defensiv zu programmieren und / oder das Verhalten gründlich zu dokumentieren.
Wasmoos Antwort macht es richtig (BEARBEITEN: Eine Reihe anderer Antworten, einschließlich der akzeptierten, wurden jetzt ebenfalls korrigiert ) - Sie können verwenden months[mm-1] || ''
oder wenn Sie es vorziehen, auf einen Blick deutlicher zu machen, was passiert, so etwas wie:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}