2012-09-07 120 views
12

可能重复:
Workarounds for JavaScript parseInt octal bugparseInt函数( “08”)返回0

我已经工作的JavaScript函数,宣称今年设定日期对象,月&日期。但是,如果月份的值为0809,则在使用parseInt()时会返回0。请看下图:

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

+0

http://stackoverflow.com/questions/6410009/what-do-you-think-parseint08-will-return?rq=1 –

+2

阅读MDN文档:https://developer.mozilla.org/en- US/docs/JavaScript/Reference/Global_Objects/parseInt这个问题很好记录在案 –

+0

@ŠimeVidas啊当然!星期五下午打嗝!感谢您的回复 – Curt

回答

37

这是因为从0开始的数字被认为是八进制数。 08是八进制数字。

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

+0

谢谢。你节省了我的时间。 –

+2

这只发生在IE8上。 –

+0

非常感谢。这是非常有用的问题和答案。 –

4

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

parseInt('08', 10);

更新:由于ES5的,浏览器应该有这个bug。八进制文字需要以0o12的形式被认为是八进制数。 08默认情况下,现在被认为是ES5的十进制数,但是,所有的浏览器可能不支持此还,所以你应该继续通过包括基数,如在radix参数传递给parseInt

1

可以解决这一问题:

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

您需要添加十基数:

parseInt("08", 10); 

一些实现默认为八进制数。