parseInt(“08”)返回0

时间:2012-09-07 13:12:22

标签: javascript parsing integer

  

可能重复:
  Workarounds for JavaScript parseInt octal bug

我一直在研究javascript函数,通过声明年,月和日来设置日期对象。日期。但是,当月份的值为0809时,使用0时会返回parseInt()。见下文:

parseInt("01") //returns 1
parseInt("02") //returns 2
parseInt("03") //returns 3
parseInt("04") //returns 4
parseInt("05") //returns 5
parseInt("06") //returns 6
parseInt("07") //returns 7
parseInt("08") //returns 0?
parseInt("09") //returns 0?
parseInt("10") //returns 10

我已经创建了一个jsFiddle来演示这个问题:

http://jsfiddle.net/GhkEf/

为什么parseInt("08")parseInt("09")会返回0

4 个答案:

答案 0 :(得分:40)

那是因为从0开始的数字被认为是八进制。并且08是八进制的错误数字。

改为使用parseInt('09', 10);

答案 1 :(得分:4)

它被解析为八进制数。使用radix中的parseInt参数。

parseInt('08', 10);

更新:从ES5开始,浏览器会出现此错误。八进制文字需要采用0o12形式才能被视为八进制数字。默认情况下,08现在被视为ES5中的十进制数字,但是,所有浏览器可能还不支持此功能,因此您应继续将radix参数传递给parseInt

答案 2 :(得分:1)

您可以通过包含基数来解决此问题,例如:

parseInt("08", 10); // outputs 8

答案 3 :(得分:1)

您需要添加10的基数:

parseInt("08", 10);

某些实现默认为八进制。