ระวัง!
สิ่งที่ควรทำให้ระฆังปลุกทันทีคือบรรทัดแรก: var month = '';
- ทำไมตัวแปรนี้จึงเริ่มต้นเป็นสตริงว่างแทนที่จะเป็นnull
หรือundefined
? อาจเป็นเพียงความเคยชินหรือคัดลอก / วางโค้ด แต่ถ้าคุณไม่ทราบอย่างแน่นอนก็ไม่ปลอดภัยที่จะเพิกเฉยต่อเมื่อคุณกำลังรีเฟรชโค้ด
หากคุณใช้อาร์เรย์ของชื่อเดือนและเปลี่ยนรหัสของคุณแสดงว่าvar month = months[mm-1];
คุณกำลังเปลี่ยนลักษณะการทำงานเพราะตอนนี้สำหรับตัวเลขที่อยู่นอกช่วงหรือค่าที่ไม่ใช่ตัวเลขmonth
จะเป็นundefined
จะเป็นคุณอาจรู้ว่าสิ่งนี้ใช้ได้ แต่มีหลายสถานการณ์ที่อาจไม่ดี
ตัวอย่างเช่นสมมติว่าคุณswitch
อยู่ในฟังก์ชันmonthToName(mm)
และมีคนเรียกฟังก์ชันของคุณในลักษณะนี้:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
ตอนนี้ถ้าคุณเปลี่ยนไปใช้อาร์เรย์และส่งคืนmonthName[mm-1]
รหัสการโทรจะไม่ทำงานตามที่ตั้งใจไว้อีกต่อไปและจะส่งundefined
ค่าเมื่อควรแสดงคำเตือน ฉันไม่ได้บอกว่านี่เป็นสิ่งที่ดีรหัสแต่ถ้าคุณไม่ทราบแน่ชัดว่ามีการใช้โค้ดอย่างไรคุณจะไม่สามารถตั้งสมมติฐานได้
หรืออาจเป็นการเริ่มต้นเดิมที่นั่นเนื่องจากโค้ดบางส่วนที่อยู่ถัดลงไปในบรรทัดถือว่าmonth
เป็นสตริงเสมอและทำสิ่งที่ชอบmonth.length
นี้จะส่งผลให้เกิดข้อยกเว้นถูกโยนทิ้งเป็นเดือนที่ไม่ถูกต้องและอาจฆ่าสคริปต์การโทรได้อย่างสมบูรณ์
ถ้าคุณทำรู้บริบททั้งหมด - เช่นมันคือทั้งหมดที่รหัสของคุณเองและไม่มีใครเคยไปใช้มันและคุณไว้วางใจตัวเองไม่ได้ลืมคุณทำบางครั้งการเปลี่ยนแปลงในอนาคต - มันอาจจะปลอดภัยที่จะเปลี่ยนพฤติกรรม เช่นนี้ แต่ข้อบกพร่องจำนวนมากมาจากสมมติฐานแบบนี้ว่าในชีวิตจริงคุณดีกว่ามากในการเขียนโปรแกรมเชิงป้องกันและ / หรือบันทึกพฤติกรรมอย่างละเอียด
คำตอบของ Wasmooทำให้ถูกต้อง(แก้ไข: คำตอบอื่น ๆ จำนวนมากรวมถึงคำตอบที่ได้รับการยอมรับได้รับการแก้ไขแล้วด้วย) - คุณสามารถใช้months[mm-1] || ''
หรือถ้าคุณต้องการทำให้ชัดเจนมากขึ้นในภาพรวมสิ่งที่เกิดขึ้นเช่น:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}