Подтвердить что ты не робот

ParseInt ( "08" ) возвращает 0

Возможный дубликат:
Методы обхода для JavaScript parseInt восьмеричной ошибки

Я работал над функцией 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, чтобы продемонстрировать эту проблему:

http://jsfiddle.net/GhkEf/

Почему parseInt("08") и parseInt("09") возвращают 0?

4b9b3361

Ответ 1

Это потому, что числа, начинающиеся с 0, считаются восьмеричными. И 08 - неправильное число в восьмеричном.

Используйте parseInt('09', 10); вместо этого.

Ответ 2

Он анализируется как восьмеричное число. Используйте параметр radix в parseInt.

parseInt('08', 10);

Обновление: с ES5 браузеры должны иметь не эту ошибку. Октальные литералы должны быть в форме 0o12 считаться восьмеричными числами. 08 по умолчанию теперь считается десятичным числом в ES5, однако все браузеры, возможно, еще не поддерживают это, поэтому вы должны продолжить передачу параметра radix на parseInt

Ответ 3

Вы можете исправить это, включив radix, например:

parseInt("08", 10); // outputs 8

Ответ 4

Вам нужно добавить основание из десяти:

parseInt("08", 10);

Некоторые версии по умолчанию равны восьмеричным.