преобразование ошибки javascript parseInt

Возможный дубликат:
Как анализироватьInt строка с ведущим 0

Я использую 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" НЕВЕРНО

Зачем?


person Tommaso Taruffi    schedule 14.09.2012    source источник
comment
ведущий 0 обозначает ВОСЬМЕРИЧНЫЙ: 00,01,02,03,04,05,06,07,10, поэтому 08 и 09 недействительны. Добавьте основание, как указано   -  person mplungjan    schedule 14.09.2012


Ответы (5)


Строка начинается с "0", принятого за восьмеричное число. Вы должны установить основание 10 в parseInt()

Попробуй это,

var a="08:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2), 10));​
person Muthu Kumaran    schedule 14.09.2012

добавить основание (основание): parseInt(a.substring(0,2), 10). Что происходит, так это то, что ваш js-движок пытается угадать, какая база у строки, и он угадывает неправильно, поэтому вам нужно сообщить движку, какую базу использовать (2 для двоичного, 8 для восьмеричного10 для десятичного, 16 для шестнадцатеричного и т. д.)

person SReject    schedule 14.09.2012
comment
В ES5 это поведение удалено, но сохраняется в браузеры, возможно, для обратной совместимости. Интересно, сколько кода на самом деле зависит от этого. - person RobG; 14.09.2012

Вы должны использовать parseInt(a.substring(0,2),10);

person Vincent Thibault    schedule 14.09.2012

parseInt принимает 2 параметра: string для анализа и radix, который является необязательным (но требуется для JSHint/JSLint). Если вы не передадите параметр {основание{, parseInt "выберет" лучшее из переданной вами строки, поэтому для строки 08 будет использоваться восьмеричная система счисления, а не десятичная (та, которую вы хотите).

TL;DR Всегда устанавливайте основание при использовании parseInt.

источник: MDN

person Calvein    schedule 14.09.2012

Если вы имеете дело со временем, просто чтобы предложить другое решение, вы можете попробовать сделать это следующим образом:

var clock = '07:30';
var time = {
  hours: +clock.split(':')[0],
  minutes: +clock.split(':')[1]
}
person elclanrs    schedule 14.09.2012