可能重复:
Workarounds for JavaScript parseInt octal bug
我正在解析一个字符串,以检查它是否是一个日期,而且碰巧我们现在发现我的方法不适用于八月或九月的日期。这就是我所做的(显然,输入并不是硬编码的,但为了简洁.):
var str = '2010-08-26 14:53';
var data = str.split(' '); // ['2010-08-26', '14:53']
var date = data[0].split('-'); // ['2010', '08', '26]
var time = data[1].split(':'); // ['14', '53']
var yyyy = parseInt(date[0]); // 2010
// THIS IS WHERE STRANGE THINGS HAPPEN:
var MM = parseInt(date[1]); // 0 - not 08 or 8, as expected!
console.log(date[1]); // prints "08" (with quotes)
console.log(date[1].toString()); // prints 08 (no quotes)
console.log(parseInt(date[1].toString())); // prints 0 (!)8月和9月以及每月8日和9日都会出现这个问题--即,当"08"或"09"被解析为整数时,将返回0而不是8或9。该代码适用于较低(例如"07")和较高(例如"10")整数(至少在预期日期范围内.)。
我做错了什么?
发布于 2010-07-27 09:00:36
使用
parseInt(date[1], 10)以确保字符串被解释为基数10 (小数)。
否则,如果以"0"开头,则被解释为基数8(八进制);如果以"0x"开头,则被解释为基数16 (十六进制)。
实际上,您应该始终包括基参数,以避免这类错误。
发布于 2010-07-27 09:02:18
这是因为以0开头的数字被视为八进制数,而"08“不是八进制,所以返回0。
读这个:http://mir.aculo.us/2010/05/12/adventures-in-javascript-number-parsing/
发布于 2010-07-27 09:06:51
parseInt()函数有第二个可选的基参数。如果省略了基参数,JavaScript假设如下:
如果字符串以"0x“开头,则基数为16 (hexadecimal)
,则不推荐此特性。
所以在你的例子中,它假设八进制数。更改为var MM = parseInt(date[1], 10);,它将起作用
https://stackoverflow.com/questions/3342053
复制相似问题