为什么parseInt(1/0,19)返回18?
我在JavaScript中遇到了一个恼人的问题。
> parseInt(1 / 0, 19)
> 18
为什么parseInt
返回18
?
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"
链接地址: http://www.djcxy.com/p/1309.html