我一直在研究javascript函数,通过声明年,月和日来设置日期对象。日期。但是,当月份的值为08
或09
时,使用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来演示这个问题:
为什么parseInt("08")
和parseInt("09")
会返回0
?
答案 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);
某些实现默认为八进制。