เอาล่ะฉันเลยไปยุ่งกับ parseInt เพื่อดูว่ามันจัดการกับค่าที่ยังไม่ได้เริ่มต้นและฉันสะดุดกับอัญมณีนี้ ด้านล่างเกิดขึ้นสำหรับ Radix ใด ๆ 24 หรือสูงกว่า
parseInt(null, 24) === 23 // evaluates to true
ฉันทดสอบใน IE, Chrome และ Firefox และพวกเขาทั้งหมดแจ้งเตือนจริงดังนั้นฉันคิดว่ามันต้องอยู่ในสเปคที่ไหนสักแห่ง การค้นหาโดย Google อย่างรวดเร็วไม่ได้ให้ผลลัพธ์ใด ๆ แก่ฉันดังนั้นฉันจึงหวังว่าจะมีคนอธิบายได้
ฉันจำได้ว่าฟังคำพูดของคร็อคฟอร์ดที่เขาพูดtypeof null === "object"
เพราะการกำกับดูแลทำให้ Object และ Null มีตัวระบุประเภทใกล้เคียงกันในหน่วยความจำหรือบางอย่างในบรรทัดเหล่านั้น แต่ตอนนี้ฉันไม่พบวิดีโอนั้น
ลองทำดู: http://jsfiddle.net/robert/txjwP/
แก้ไขการแก้ไข: Radix ที่สูงกว่าให้ผลลัพธ์ที่แตกต่าง 32 ผลลัพธ์ 785077
แก้ไข 2จาก zzzzBov:[24...30]:23, 31:714695, 32:785077, 33:859935, 34:939407, 35:1023631, 36:1112745
TL; DR
อธิบายว่าทำไมจึงparseInt(null, 24) === 23
เป็นข้อความที่แท้จริง
alert(parseInt(null, 34) === 23)
ผลิตแล้วfalse
alert(parseInt(null,26)===23);
ยังผลิตจริงหรือไม่!
[24...30]:23
, 31:714695
, 32:785077
, 33:859935
, 34:939407
, 35:1023631
, 36:1112745
,[37...]:NaN
undefined
เป็นพารามิเตอร์แรกส่งกลับผลลัพธ์ที่แปลกสำหรับ 30