Javascript parseInt给出了非常意外的结果

Tom*_*han 2 javascript parseint

可能重复:
JavaScript parseInt八进制错误的变通方法

我正在解析一个字符串以检查它是否是一个日期,我们现在发现我的方法不适用于八月或九月的日期.这就是我所做的(显然,输入并不是真正的硬编码,但为了简洁起见......):

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 (!)
Run Code Online (Sandbox Code Playgroud)

这个问题出现了8,9月份和8楼和9月的每-也就是说,在任"08""09"被解析为整数,0则返回,而不是89.该代码适用于较低(例如"07")和较高(例如"10")整数(至少在预期日期范围内......)

我究竟做错了什么?

Tom*_*lak 9

使用

parseInt(date[1], 10)
Run Code Online (Sandbox Code Playgroud)

确保字符串被解释为基数10(十进制).

否则,如果以它开头"0",则将其解释为基数8(八进制),如果以它开头,则将其解释为基数16(十六进制)"0x".

实际上,您应该始终包含基本参数以避免这些类型的错误.

  • 最后一句话+1.我往往懒得做的一步> _ <......它会让你免于这么多头痛 (2认同)