我正在使用Google Chrome版。 21.0.1180.89
我执行:
var a="07:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2)));
输出正确:“07 - > 7”确定
我执行:
var a="08:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2)));
输出正确:“08 - > 0”错误
为什么?
答案 0 :(得分:2)
字符串以“0”作为八进制开头。您必须在parseInt()
试试这个,
var a="08:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2), 10));
答案 1 :(得分:0)
添加基数(基数):parseInt(a.substring(0,2), 10)
。发生了什么事情是你的js引擎试图猜测字符串是什么基础,并且猜错了,所以你需要告诉引擎使用哪个基数(2
表示二进制,8
表示八进制{{ 1}}表示十进制,10
表示十六进制等)
答案 2 :(得分:0)
你必须使用parseInt(a.substring(0,2),10);
答案 3 :(得分:0)
parseInt
取2个参数,string
解析,radix
是optionnal(但需要JSHint / JSLint)。
如果你没有传递{radix {参数,parseInt
将“选择”最适合你传递的字符串,那么对于08
字符串,它将采用八进制基数而不是十进制基数(你想要的那个)。
TL; DR 使用parseInt
时始终设置基数。
来源:MDN
答案 4 :(得分:0)
如果你只是为了提供不同的解决方案来处理时间,你可以尝试这样做:
var clock = '07:30';
var time = {
hours: +clock.split(':')[0],
minutes: +clock.split(':')[1]
}