18

可能重复:
JavaScript parseInt 八进制错误的解决方法

我一直在研究一个 javascript 函数,通过声明年、月和日期来设置日期对象。但是,当月份的值为08或时090使用 时会返回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

4 回答 4

45

这是因为以 0 开头的数字被认为是八进制的。08 是八进制的错误数字。

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

于 2012-09-07T13:13:04.410 回答
5

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

parseInt('08', 10);

更新:从 ES5 开始,浏览器不应该这个错误。八进制文字需要采用0o12被视为八进制数的形式。08现在在 ES5 中默认被认为是十进制数,然而,所有浏览器可能还不支持这个,所以你应该继续将radix参数传递给parseInt

于 2012-09-07T13:13:24.393 回答
1

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

parseInt("08", 10); // outputs 8
于 2012-09-07T13:14:09.840 回答
1

您需要添加十个基数:

parseInt("08", 10);

一些实现默认为八进制。

于 2012-09-07T13:14:20.947 回答