我在 JavaScript 中有一个烦人的问题。
> parseInt(1 / 0, 19) > 18
为什么parseInt函数返回18?
parseInt
18
结果1/0是Infinity。
1/0
Infinity
parseInt将它的第一个参数视为一个字符串,这意味着首先Infinity.toString()被调用,产生字符串"Infinity"。所以它的工作原理与您要求它以"Infinity"19 为基数转换为十进制一样。
Infinity.toString()
"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 为基数的有效数字)。
I
n
因此,它的行为就像您调用parseInt("I", 19)了 ,它通过上表转换为十进制 18。
parseInt("I", 19)