2012-01-06 3 views
-1

Можно создать дубликат:
Workarounds for JavaScript parseInt octal bugПочему parseInt ("09") возвращает 0, а parseInt ("07") возвращает 7?

Почему

parseInt("09") 

возвращение 0 но

parseInt("07") 

возврат 7?

+4

Не большой поклонник lmgtfy ответов, но вы пробовали прибегая к помощи точной фразы: "Почему ParseInt (09) возвращает 0"? – georg

+0

Так много вопросов уже ответили на parseInt() и с помощью правильного основания. –

+0

Это javascript gotcha. Проверьте [this] (http://stackoverflow.com/questions/850341/workarounds-for-javascript-parseint-octal-bug) Ответ на StackOverflow для получения дополнительной информации – Kyle

ответ

20

Основание для струн, начинающихся с 0, может быть восьмеричным (когда ради не указано - и в зависимости от браузера).

Вы ищете:

parseInt("09", 10) 

Смотрите документацию по parseInt:

Если радикс не определен или 0, JavaScript принимает следующее:

  • Если строка ввода начинается с «0x» или «0X», радиус 16 (шестнадцатеричный).
  • Если входная строка начинается с «0», то радиус равен восьми (восьмеричный). Эта функция нестандартна, и некоторые реализации намеренно не поддерживают ее (вместо этого используют radix 10). По этой причине всегда указывайте радиус при использовании parseInt.
  • Если входная строка начинается с любого другого значения, радиус равен 10 (десятичный).

Комментарии к radix необязательный параметр (второй в моем примере) говорит, что это:

Хотя этот параметр не является обязательным, всегда указывать это устранить читателя путаницы и гарантировать предсказуемое поведение.

+2

Неверно. База по умолчанию для 'parseInt' - это« интеллектуальная догадка », как указано в MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt. Даже это поведение зависит от разных особенностей браузера. –

+1

@AndrewWhitaker - Да, ответ уже исправлен и добавлена ​​информация из MDN. – Oded

1

Ведущий 0 указывает, что значение угля «020» равно 16, «07» равно 7, в восьмеричной системе нет цифры «9», следовательно, никакого преобразования!

Использование ParseInt ("09", 10), чтобы получить значение 9.

Смежные вопросы