为什么parseInt(1/0, 19)返回18?

19 浏览
0 Comments

为什么parseInt(1/0, 19)返回18?

我在JavaScript中有一个令人烦恼的问题。

> parseInt(1 / 0, 19)
> 18

为什么parseInt函数返回18

admin 更改状态以发布 2023年5月21日
0
0 Comments

这里是事件顺序:\n1. 1/0计算出Infinity\n2. parseInt读取Infinity,并快乐地发现I在基数为19时为18\n3. parseInt忽略该字符串的余数,因为它无法转换。\n请注意,对于任何基数>= 19,您都会得到结果,但对于低于此基数的基数则无法。对于基数>= 24,您将获得较大的结果,因为在那一点上,n成为有效数字。

0
0 Comments

1/0 的结果是 Infinity

parseInt 将其第一个参数视为字符串,这意味着首先调用 Infinity.toString(),生成字符串 "Infinity"。因此,它会像将基数为 19 的 "Infinity" 转换为十进制一样工作。

这里是基数为 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 后停止(因为在基数为 19 的情况下,n 不是有效数字)。

因此,它的行为就像调用 parseInt("I", 19),该表格以上将其转换为十进制值 18。

0