【发布时间】:2019-05-01 04:31:33
【问题描述】:
在审查parseInt(string, radix) 中:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt
除了这个之外,所有13 的例子都很有意义。
根据一个示例,parseInt(015, 10) 将返回 13。假设以 0 开头的数字被视为八进制,这是有道理的,而不管基数位置中出现的10。
因此,如果八进制是在问题标题中指定的:
parseInt(021, 8)
那为什么不是 17(根据 Mozilla 文档和我在 jsfiddle 的测试中的 15?
任何见解将不胜感激。
【问题讨论】:
-
如果你阅读了你链接的 MDN 文档的第一行,你会发现第一个参数应该是一个字符串。
-
当您将数字(不是字符串)写为
021时,它是八进制表示法。因此,当引擎解析您的代码时,它会将其解析为数字 17(十进制)。当您调用 parseInt 时,17 被转换为字符串“17”,然后解码为八进制数。 17 八进制 = 15 十进制。将其更改为字符串"021"即可得到预期结果。 -
parseInt(021,10) === parseInt(021) === 17。问题的根源是将“8”作为基数传递。 -
parseInt(021, 8) === parseInt(017, 10) === 15。 (因为021的内部处理) -
@RichS 不,问题的根源不是将
8作为基数传递。如果有的话,它会将021作为数字而不是字符串传递。这就是示例的重点。
标签: javascript