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
之后停止(因为n
不是基数 19 中的有效数字)。
因此,它的行为就像你调用了parseInt("I", 19)
,它被上面的表转换为十进制 18。
这是事件的顺序:
1/0
评估为Infinity
parseInt
读取Infinity
并愉快地注意到I
在 19 岁时是 18 岁parseInt
忽略字符串的其余部分,因为它无法转换。 请注意,您将获得任何基数>= 19
,但不会获得低于此值的基数。对于>= 24
基数,您将得到更大的结果,因为n
在该点变为有效数字。
要添加上述答案:
parseInt 旨在将字符串解析为数字(线索在名称中)。在你的情况下,你根本不想做任何解析,因为 1/0 已经是一个数字,所以这是一个奇怪的功能选择。如果您有一个数字(您这样做)并希望将其转换为特定基数,则应使用带有基数的 toString 。
var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"