Hati-hati!
Hal yang harus segera memicu lonceng alarm adalah baris pertama: var month = '';
- mengapa variabel ini diinisialisasi ke string kosong, bukan null
atau undefined
? Ini mungkin hanya kebiasaan atau salin / tempel kode, tetapi kecuali Anda tahu pasti, tidak aman untuk mengabaikannya saat Anda memfaktorkan ulang kode.
Jika Anda menggunakan array nama bulan dan mengubah kode var month = months[mm-1];
Anda, Anda mengubah perilaku, karena sekarang untuk angka di luar rentang, atau nilai non-numerik, month
akan undefined
. Anda mungkin tahu bahwa ini tidak masalah, tetapi ada banyak situasi di mana hal ini akan berdampak buruk.
Misalnya, Anda switch
ada dalam suatu fungsi monthToName(mm)
, dan seseorang memanggil fungsi Anda seperti ini:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Sekarang jika Anda mengubah menggunakan array dan mengembalikan monthName[mm-1]
, kode panggilan tidak akan berfungsi lagi sebagaimana mestinya, dan akan mengirimkan undefined
nilai ketika seharusnya menampilkan peringatan. Saya tidak mengatakan ini adalah kode yang bagus , tetapi kecuali Anda tahu persis bagaimana kode itu digunakan, Anda tidak dapat membuat asumsi.
Atau mungkin inisialisasi asli ada di sana karena beberapa kode lebih jauh mengasumsikan bahwa month
akan selalu berupa string, dan melakukan sesuatu seperti month.length
- ini akan menghasilkan pengecualian yang dilemparkan selama beberapa bulan yang tidak valid dan berpotensi mematikan skrip pemanggil sepenuhnya.
Jika Anda benar- benar mengetahui konteks keseluruhan - mis. Itu semua adalah kode Anda sendiri, dan tidak ada orang lain yang akan menggunakannya, dan Anda percaya pada diri sendiri tidak lupa Anda membuat perubahan di masa mendatang - mungkin aman untuk mengubah perilaku seperti ini, tapi soooo banyak bug berasal dari asumsi semacam ini bahwa dalam kehidupan nyata Anda jauh lebih baik memprogram secara defensif dan / atau mendokumentasikan perilaku secara menyeluruh.
Jawaban Wasmoo benar (EDIT: sejumlah jawaban lain, termasuk yang diterima, kini telah diperbaiki juga) - Anda dapat menggunakanmonths[mm-1] || ''
atau jika Anda lebih suka membuatnya lebih jelas sekilas tentang apa yang terjadi, seperti:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}