Hãy cẩn thận!
Điều sẽ ngay lập tức kích hoạt chuông cảnh báo là dòng đầu tiên: var month = '';
- tại sao biến này được khởi tạo thành một chuỗi rỗng, thay vì null
hoặc undefined
? Nó có thể chỉ là do thói quen hoặc sao chép / dán mã, nhưng trừ khi bạn biết chắc chắn điều đó, nếu không sẽ không an toàn khi bạn đang cấu trúc lại mã.
Nếu bạn sử dụng một mảng tên tháng và thay đổi mã của bạn thành var month = months[mm-1];
bạn đang thay đổi hành vi, bởi vì bây giờ đối với các số nằm ngoài phạm vi hoặc các giá trị không phải số, month
sẽ như vậy undefined
. Bạn có thể biết rằng điều này là tốt, nhưng có nhiều tình huống mà điều này sẽ trở nên tồi tệ.
Ví dụ: giả sử bạn switch
đang ở trong một hàm monthToName(mm)
và ai đó đang gọi hàm của bạn như thế này:
var monthName = monthToName(mm);
if (monthName === '') {
alert("Please enter a valid month.");
} else {
submitMonth(monthName);
}
Bây giờ nếu bạn chuyển sang sử dụng một mảng và quay lại monthName[mm-1]
, mã gọi sẽ không còn hoạt động như dự kiến và nó sẽ gửi undefined
các giá trị khi nó được cho là hiển thị cảnh báo. Tôi không nói đây là mã tốt , nhưng trừ khi bạn biết chính xác mã đang được sử dụng như thế nào, bạn không thể đưa ra giả định.
Hoặc có thể quá trình khởi tạo ban đầu đã ở đó bởi vì một số mã ở dòng sâu hơn giả định rằng đó month
sẽ luôn là một chuỗi và thực hiện điều gì đó giống như month.length
- điều này sẽ dẫn đến một ngoại lệ được ném ra trong các tháng không hợp lệ và có khả năng giết chết hoàn toàn tập lệnh gọi.
Nếu bạn làm biết toàn bộ bối cảnh - ví dụ đó là tất cả các mã của riêng bạn, và không ai khác là bao giờ sẽ sử dụng nó, và bạn tin tưởng mình không quên bạn thực hiện đôi khi sự thay đổi trong tương lai - nó có thể là an toàn để thay đổi hành vi như thế này, nhưng rất nhiều lỗi đến từ kiểu giả định rằng trong cuộc sống thực, tốt hơn hết bạn nên lập trình phòng thủ và / hoặc ghi lại hành vi một cách kỹ lưỡng.
Câu trả lời của Wasmoo rất đúng (CHỈNH SỬA: một số câu trả lời khác, bao gồm cả câu được chấp nhận, hiện cũng đã được sửa) - bạn có thể sử dụng months[mm-1] || ''
hoặc nếu bạn muốn làm cho nó rõ ràng hơn trong nháy mắt những gì đang xảy ra, đại loại như:
var months = ['January', 'February', ...];
var month;
if (mm >= 1 && m <= 12) {
month = months[mm - 1];
} else {
month = ''; // empty string when not a valid month
}