Ответ 1
Потому что это рассматривается как восьмеричный формат, по умолчанию. Если вы хотите получить 9, вы должны добавить нумерацию нужных вам чисел, а это 10, а не 8 (для восьмеричных), поэтому вызовите:
parseInt("09", 10);
Возможный дубликат:
Методы обхода для JavaScript parseInt восьмеричной ошибки
ЧРЕЗВЫЧАЙНО здесь.
parseInt ( "09" ) = 0
но
parseInt ( "9" ) = 9
Почему нулевой префикс не просто отключен?
оповещения (ParseInt ( "01" )); = 1
.. rage quit
Потому что это рассматривается как восьмеричный формат, по умолчанию. Если вы хотите получить 9, вы должны добавить нумерацию нужных вам чисел, а это 10, а не 8 (для восьмеричных), поэтому вызовите:
parseInt("09", 10);
А .7. ParseInt
parseInt - это функция, которая преобразует строку в целое число. Он останавливается, когда видит недигит, поэтому
parseInt("16")
и parseInt("16 tons")
дают тот же результат. Было бы неплохо, если бы
функция как-то сообщила нам о дополнительном тексте, но это не так.
Если первый символ строки равен 0, то строка оценивается в базе 8 вместо базы 10. В базовых 8, 8 и
9 не являются цифрами, поэтому parseInt("08")
и parseInt("09")
производят 0 в качестве результата. Эта ошибка вызывает
проблемы в программах, которые анализируют даты и время. К счастью, parseInt может принимать параметр radix, так что
parseInt("08", 10)
производит 8. Я рекомендую вам всегда предоставлять параметр radix.
"JavaScript: Хорошие детали Дугласа Крокфорда. Copyright 2008 Yahoo! Inc., 978-0-596-51774-8 ".
это причины:
If the string begins with "0x", the radix is 16 (hexadecimal)
If the string begins with "0", the radix is 8 (octal). This feature is deprecated
If the string begins with any other value, the radix is 10 (decimal)
Do
parseInt("09", 10)
Чтобы указать базу 10.
Изменить: Чтобы уточнить, число с префиксом нуля будет считаться восьмеричным обозначением, а "09" не является допустимым восьмеричным числом.