Dikkatli ol!
Alarm zillerini hemen tetiklemesi gereken şey ilk satırdır: var month = '';
- bu değişken neden null
veya yerine boş bir dizeyle başlatılıyor?undefined
? Bu sadece bir alışkanlık ya da kopyalama / yapıştırma olabilir, ancak kesin olarak bilmiyorsanız, kodu yeniden düzenlerken onu göz ardı etmek güvenli değildir.
Bir ay adları dizisi kullanır ve kodunuzu var month = months[mm-1];
kendinize göre değiştirirseniz davranışı değiştirirsiniz, çünkü artık aralık dışındaki sayılar veya sayısal olmayan değerler month
içinundefined
. Bunun sorun olmadığını biliyor olabilirsiniz, ancak bunun kötü olacağı birçok durum vardır.
Örneğin, diyelim ki sizin switch
bir fonksiyonda monthToName(mm)
ve birisi sizin fonksiyonunuzu şöyle çağırıyor:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Şimdi, bir dizi kullanmaya ve geri dönmeye geçerseniz monthName[mm-1]
, çağıran kod artık amaçlandığı gibi çalışmayacak ve undefined
bir uyarı göstermesi gerektiğinde değerleri gönderecektir . Bunun iyi bir kod olduğunu söylemiyorum , ancak kodun nasıl kullanıldığını tam olarak bilmiyorsanız, varsayımlarda bulunamazsınız.
Ya da belki de orijinal başlatma oradaydı çünkü satırın ilerisindeki bazı kodlar bunun month
her zaman bir dize olacağını varsayarmonth.length
- bu geçersiz aylar için bir istisna atılmasına neden olacak ve potansiyel olarak çağıran betiği tamamen öldürecektir.
Eğer varsa bunu bilmek metnin bütününü - örneğin hepsi kendi kod ve başka hiç kimse onu kullanacak, ve kendinizi gelecekte değişiklik ara uygun yapılmış unutmamak güven - davranışını değiştirmek için güvenli olabilir bunun gibi, ancak pek çok hata bu tür bir varsayımdan geliyor, gerçek hayatta savunma amaçlı programlama ve / veya davranışı kapsamlı bir şekilde belgelemekten çok daha iyi olursunuz.
Wasmoo'nun cevabı doğru anlıyor (DÜZENLEME: kabul edilen cevap da dahil olmak üzere bir dizi başka cevap da düzeltildi) - kullanabilirsiniz months[mm-1] || ''
veya bir bakışta neler olduğunu daha açık hale getirmeyi tercih ederseniz, şuna benzer bir şey:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}