ParseInt()奇怪的八进制行为

时间:2018-12-22 19:31:50

标签: javascript parseint

我必须将一些输入数据转换为整数。 我发现了parseInt()函数。
如果输入是字符串,一切都很好:

console.log(parseInt("123")) //123

即使字符串以0开头:

console.log(parseInt("0123")) //123

但是,如果数字以0开头,则它将为83!

    console.log(parseInt(0123)) //83 instead of 123

我听说这是因为八进制行为(Javascript parseInt() with leading zeros),所以我给了它一个基数参数:

    console.log(parseInt(0123,10)) //83!!!

还是83岁!

然后,最奇怪的是:
我以为:八进制123必须给八进制123! 但这给了NaN

console.log(parseInt(0123, 8)) //NaN

为什么这种奇怪的行为?我该如何解决?

谢谢!

2 个答案:

答案 0 :(得分:2)

在此代码中,您可以定义八进制格式的数字(而不是字符串),然后将其传递给parseInt。然后parseInt将该数字转换为字符串("83"),然后再次对其进行解析。

如果将字符串传递给parseInt,将获得预期的结果:

console.log(parseInt('0123'))

答案 1 :(得分:1)

您应该结合使用字符串和基数来获取正确的值。这是一个示例:

parseInt(01234) // returns 668
parseInt('01234', 10) // returns 1234