ผมมีปัญหาที่น่ารำคาญในJavaScript
> parseInt(1 / 0, 19)
> 18
ทำไมparseInt
ฟังก์ชั่นถึงกลับมา18
?
ผมมีปัญหาที่น่ารำคาญในJavaScript
> parseInt(1 / 0, 19)
> 18
ทำไมparseInt
ฟังก์ชั่นถึงกลับมา18
?
คำตอบ:
ผลจากการมี1/0
Infinity
parseInt
ถือว่าอาร์กิวเมนต์แรกมันเป็นสตริงซึ่งหมายความว่าแรกของทั้งหมดจะเรียกว่าการผลิตสตริงInfinity.toString()
"Infinity"
มันทำงานเหมือนกับว่าคุณขอให้มันแปลง"Infinity"
ในฐาน 19 เป็นทศนิยม
นี่คือตัวเลขในฐาน 19 พร้อมกับค่าทศนิยม:
Base 19 Base 10 (decimal)
---------------------------
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
a 10
b 11
c 12
d 13
e 14
f 15
g 16
h 17
i 18
สิ่งที่เกิดขึ้นถัดไปคือการparseInt
สแกนอินพุต"Infinity"
เพื่อค้นหาว่าส่วนใดของมันที่สามารถแยกวิเคราะห์และหยุดหลังจากที่รับรหัสแรกI
(เพราะn
ไม่ใช่ตัวเลขที่ถูกต้องในฐาน 19)
ดังนั้นมันจะทำงานเหมือนกับว่าคุณโทรหาparseInt("I", 19)
ซึ่งจะแปลงเป็นทศนิยม 18 ตามตารางด้านบน
parseInt('Infini',24)
ลอง @mithunsatheesh
n
parseInt("Infini", 24)
นี่คือลำดับเหตุการณ์:
1/0
ประเมินให้ Infinity
parseInt
อ่านInfinity
และจดบันทึกอย่างมีความสุขที่I
18 ในฐาน 19parseInt
ละเว้นส่วนที่เหลือของสตริงเนื่องจากไม่สามารถแปลงได้โปรดทราบว่าคุณจะได้รับผลลัพธ์สำหรับฐานใด ๆ>= 19
แต่ไม่ใช่สำหรับฐานด้านล่าง สำหรับฐาน>= 24
คุณจะได้รับผลลัพธ์ที่มากขึ้นโดยn
จะกลายเป็นตัวเลขที่ถูกต้อง ณ จุดนั้น
parseInt
จะยอมรับคือ 36 เนื่องจากมี 26 ตัวอักษรในตัวอักษรภาษาอังกฤษและการประชุมคือการใช้ตัวเลขแล้วตัวอักษรเป็นชุดของตัวเลขที่ถูกต้องในฐานที่กำหนด
Infinity
เป็น"Infinity"
...
หากต้องการเพิ่มคำตอบข้างต้น:
parseInt มีวัตถุประสงค์เพื่อแยกสตริงเป็นตัวเลข (เบาะแสอยู่ในชื่อ) ในสถานการณ์ของคุณคุณไม่ต้องการแยกวิเคราะห์เลยเนื่องจาก 1/0 มีตัวเลขอยู่แล้วดังนั้นมันจึงเป็นฟังก์ชั่นที่แปลกประหลาด หากคุณมีตัวเลข (ซึ่งคุณทำ) และต้องการแปลงให้เป็นฐานเฉพาะคุณควรใช้toString ด้วย radixแทน
var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"
เพื่อเพิ่มคำตอบข้างต้น
parseInt(1/0,19)
เทียบเท่ากับ parseInt("Infinity",19)
ภายในฐาน 19 ตัวเลข0-9
และ A-I
(or a-i)
เป็นตัวเลขที่ถูกต้อง ดังนั้นจาก "อินฟินิตี้" ใช้เวลาI
ของฐาน 19 และแปลงเป็นฐาน 10 ซึ่งกลายเป็น 18 จากนั้นก็พยายามที่จะใช้ตัวละครต่อไปคือn
ที่ไม่ได้อยู่ในฐาน 19 ดังนั้นทิ้งตัวละครต่อไป (ตามพฤติกรรมของจาวาสคริปต์ )
ดังนั้นถ้าคุณเขียนparseInt("Infinity",19)
หรือ parseInt("I",19)
หรือผลจะเป็นเช่นเดียวกันparseInt("i",19)
18
ตอนนี้ถ้าคุณเขียนparseInt("I0",19)
ผลลัพธ์จะ342
เป็นI X 19 (the base)^1 + 0 X 19^0
= 18 X 19^1 + 0 X 19^0
= 18 X 19 + 0 X 1
=342
ในทำนองเดียวกันparseInt("I11",19)
จะส่งผลให้6518
กล่าวคือ
18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 361 + 1 X 19 + 1 X 1
= 6498 + 19 + 1
= 6518
if
อาจช่วย