มีห้าวิธีในการแปลงข้อมูลเป็นตัวเลขใน JS มีสามประเภท ได้แก่:
•การบังคับ ชนิดข้อมูลพื้นฐานของ JS จะถูกแปลงเป็นประเภทที่สอดคล้องกัน (Number(v)) ด้วยวิธีนี้
•ฟังก์ชันดั้งเดิม ทั้งสองฟังก์ชันนี้มีผลลัพธ์ที่แตกต่างกัน (parseInt(v,radix), parseFloat(v))
•การแปลงโดยนัย JS จะแปลงตัวแปรให้เป็นประเภทที่สอดคล้องกัน (การคำนวณบิต การคำนวณทางคณิตศาสตร์) ในระหว่างการดำเนินการ
ค่าดั้งเดิมที่แปลงแล้วยังสามารถแบ่งออกเป็นสามประเภทง่ายๆ: วัตถุ ค่าพิเศษ และสตริง
ค่าพิเศษใน JS มีดังต่อไปนี้
•ไม่ได้กำหนด ไม่ได้กำหนด เมื่อมีการประกาศตัวแปรแต่ไม่ได้กำหนดค่าหรือค่าของแอตทริบิวต์ที่ไม่มีอยู่ในวัตถุจะเป็นดังนี้
•NaN/อนันต์ คือ "ตัวเลข" ที่ดื้อรั้นสองตัว (typeof == number) ซึ่งแสดงถึงจำนวนที่ไม่ใช่ตัวเลขและจำนวนอนันต์ตามลำดับ ดูเหมือนไร้ประโยชน์ หากการแปลงเป็นตัวเลขล้มเหลว โดยทั่วไปค่าที่ส่งคืนจะเป็น NaN
•null ใช้เป็นวัตถุที่มีค่าเป็นศูนย์ (typeof == object)
•จริง/เท็จ ค่าบูลีน แสดงถึงจริงหรือเท็จ เทียบเท่ากับ 1/0
สำหรับสตริง ก็สามารถแบ่งย่อยตามเนื้อหาได้ ตามนิพจน์ตัวเลขของ JS พวกเขาสามารถแบ่งออกเป็นถูกกฎหมายและผิดกฎหมาย มีหลายวิธีในการจำแนกหมายเลขตามกฎหมาย:
•เครื่องหมาย: เครื่องหมายบวก เครื่องหมายลบ ไม่ได้ลงนาม
•ฐาน: ฐานแปด ทศนิยม เลขฐานสิบหก
•สัญกรณ์ทางวิทยาศาสตร์
•ทศนิยม จำนวนเต็ม และคำย่อของทศนิยม
จากการจำแนกประเภทข้างต้น ฉันได้สร้างการสาธิตเพื่อทดสอบผลลัพธ์ของวิธีการต่างๆ และการแปลงตัวเลข ภาพหน้าจอด้านล่างคือการแปลงภายใต้ Chrome
เมื่อพิจารณาผลลัพธ์แล้ว การคำนวณเพียงบิตเท่านั้นที่สามารถแปลงค่าใดๆ ให้เป็นจำนวนจำกัด (isFinite) ผลลัพธ์ของการคำนวณทางคณิตศาสตร์และการแปลงแบบบังคับจะเหมือนกัน
การแปลงค่าพิเศษเกี่ยวข้องกับมูลค่าเดิมและวิธีการแปลง การแปลง parseInt/parseFloat ทั้งหมดล้มเหลวและส่งคืน NaN
•NaN/unknown ถูกแปลงเป็น NaN โดยวิธีอื่น;
•อินฟินิตี้ถูกแปลงเป็น NaN โดย parseInt และวิธีการที่เหลือจะไม่เปลี่ยนค่า
•null/false/true ไม่สามารถแปลงโดย parseInt/parseFloat และส่งคืน NaN
การวิเคราะห์การแปลงสตริงส่วนใหญ่ขึ้นอยู่กับวิธีการแปลง แต่วิธีการทั้งหมดไม่รองรับตัวเลขที่แสดงเป็นฐานแปด แต่จะถือเป็นเลขทศนิยมที่สอดคล้องกัน
• การคำนวณเชิงตรรกะจะแปลงนิพจน์ทางกฎหมาย ยกเว้นเลขฐานสิบหกที่เป็นลบ และละทิ้งส่วนทศนิยม นิพจน์ที่ไม่ถูกต้องจะส่งกลับค่าศูนย์
•การคำนวณทางคณิตศาสตร์/ตัวเลขจะคล้ายกับการคำนวณเชิงตรรกะ แต่ไม่ได้ปัดเศษทศนิยม นิพจน์ที่ไม่ถูกต้องอื่น ๆ นอกเหนือจากสตริงว่างจะส่งกลับ NaN
•parseInt ยังคงเก็บเฉพาะส่วนจำนวนเต็ม แต่สำหรับนิพจน์ที่ไม่ถูกต้อง จะใช้ส่วนจำนวนเต็มตามกฎหมาย (ทศนิยม เลขฐานสิบหก ไม่รวมสัญกรณ์ทางวิทยาศาสตร์) ไว้หน้าสตริงแล้วแปลง มิฉะนั้นจะส่งกลับ NaN
•parseFloat คล้ายกับ parseInt ยกเว้นว่าสามารถจดจำและเก็บส่วนทศนิยมได้ และไม่รองรับเลขฐานสิบหก