วันนี้ตอนที่กำลังเขียน Calendar แบบ Popup ก็เจอ bug ที่แสนรันทดอันหนึ่งกับฟังก์ชัน parseInt ซึ่งเป็นฟังก์ชันที่ใช้กันบ่อยถึงบ่อยมาก นั่นคือ ถ้าเราใส่ว่า
parseInt("01");
จะได้ผลลัพท์เป็น 1 ซึ่งก็ปกติ แต่ถ้าเราลองใส่
parseInt("08");
parseInt("09");
จะได้เป็น 0 ทั้งคู่!!
ที่เป็นแบบนี้เพราะ parseInt จะสามารถใช้แปลงเลขได้ทุกฐาน และมันมอง 0 นั้นเป็นเลขฐาน 8 เพราะฉะนั้นตัวเลข 8 กับ 9 ซึ่งไม่มีในฐาน 8 จึงถือเป็นตัวที่ผิด และแปลงออกมาให้แค่ 0 ตัวเดียว ผลลัพท์จึงออกมาเป็น 0
แต่คำถามที่ว่า ทำไมมันถึงมองเป็นเลขฐาน 8 น่ะหรอ ผมก็ไม่รู้เหมือนกัน(ลองหาใน Internet ก็หาไม่เจอ) วิธีแก้ไขก็ง่ายๆเลยครับ parseInt("08",10); ใส่ฐานกำกับมันซะ จบ!
ข้อมูลเพิ่มเติม [parseInt Bug]