Ответ 1
Это потому, что числа, начинающиеся с 0, считаются восьмеричными. И 08 - неправильное число в восьмеричном.
Используйте parseInt('09', 10);
вместо этого.
Возможный дубликат:
Методы обхода для 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, чтобы продемонстрировать эту проблему:
Почему parseInt("08")
и parseInt("09")
возвращают 0
?
Это потому, что числа, начинающиеся с 0, считаются восьмеричными. И 08 - неправильное число в восьмеричном.
Используйте parseInt('09', 10);
вместо этого.
Он анализируется как восьмеричное число. Используйте параметр radix
в parseInt
.
parseInt('08', 10);
Обновление: с ES5 браузеры должны иметь не эту ошибку. Октальные литералы должны быть в форме 0o12
считаться восьмеричными числами. 08
по умолчанию теперь считается десятичным числом в ES5, однако все браузеры, возможно, еще не поддерживают это, поэтому вы должны продолжить передачу параметра radix
на parseInt
Вы можете исправить это, включив radix, например:
parseInt("08", 10); // outputs 8
Вам нужно добавить основание из десяти:
parseInt("08", 10);
Некоторые версии по умолчанию равны восьмеричным.