Оповещение (ParseInt ( "09" )); показывает мне "0" Почему?

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

ЧРЕЗВЫЧАЙНО здесь.

parseInt ( "09" ) = 0

но

parseInt ( "9" ) = 9

Почему нулевой префикс не просто отключен?

оповещения (ParseInt ( "01" )); = 1

.. rage quit

Ответы

Ответ 1

Потому что это рассматривается как восьмеричный формат, по умолчанию. Если вы хотите получить 9, вы должны добавить нумерацию нужных вам чисел, а это 10, а не 8 (для восьмеричных), поэтому вызовите:

parseInt("09", 10);

Ответ 2

А .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 ".

Ответ 3

это причины:

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)

http://www.w3schools.com/jsref/jsref_parseInt.asp

Ответ 4

Do

parseInt("09", 10)

Чтобы указать базу 10.

Изменить: Чтобы уточнить, число с префиксом нуля будет считаться восьмеричным обозначением, а "09" не является допустимым восьмеричным числом.