ลองดำเนินการดังต่อไปนี้ใน JavaScript:
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
ฉันเพิ่งเรียนรู้วิธีที่ยากที่จาวาสคริปต์คิดว่าศูนย์นำจะระบุจำนวนเต็มฐานแปดและเนื่องจากไม่มี"8"
หรือ"9"
ในฐาน -8 ฟังก์ชันจะส่งกลับศูนย์ ชอบหรือไม่นี้เกิดจากการออกแบบ
วิธีแก้ปัญหาคืออะไร
หมายเหตุ: เพื่อความสมบูรณ์ฉันจะโพสต์โซลูชัน แต่เป็นวิธีแก้ปัญหาที่ฉันเกลียดดังนั้นโปรดโพสต์คำตอบอื่น ๆ / ดีกว่า
ปรับปรุง:
รุ่นที่ 5 ของมาตรฐาน JavaScript ( ECMA-262 ) แนะนำการเปลี่ยนแปลงแบบไม่ต่อเนื่องที่กำจัดพฤติกรรมนี้ Mozilla มีดีเขียนขึ้น
10
(ฐานสิบ) ยกเว้นว่าจะมีการใช้ตัวเลขในการวิเคราะห์คำนำหน้า0x
เช่น0xFF
ในกรณีนี้พารามิเตอร์พื้นฐานจะเริ่มต้นที่ 16 หวังว่าในหนึ่งวัน จะเป็นความทรงจำที่ห่างไกล
+'08' === 8
ล่ะ ความจริง! บางทีคุณอาจต้องการparseInt
รหัสจริงของคุณ แต่ไม่ใช่สำหรับรหัสด้านบน
Number('08')
0
หรือundefined
และหมายเลขของสตริงเริ่มต้นด้วย0
ตัวเลขที่ไม่ได้ตามด้วยx
หรือX
จากนั้นการนำไปใช้อาจตีความตามจำนวนว่าเป็นฐานแปดหรือเป็นทศนิยมการใช้งานจะได้รับการสนับสนุนเพื่อตีความตัวเลขในกรณีนี้ว่าเป็นทศนิยม " ( สิ่งที่ฉันเน้น)