Функция JavaScript parseInt() неправильно анализирует числа с ведущим 0

У меня есть нули перед положительным целым числом. Я хочу удалить нули, чтобы осталось только положительное целое число. Например, «001» будет только «1». Я думал, что проще всего использовать parseInt('001'). Но я обнаружил, что это не работает для чисел 8 и 9. Пример parseInt('008') приведет к '0' вместо '8'.

Вот весь html-код:

<html> <body>
<script>
var integer = parseInt('002');
document.write(integer);

</script>
</body> </html>

Но можно ли как-то сообщить об этой проблеме? Кто-нибудь знает другое простое решение этой проблемы?


person einstein    schedule 19.12.2010    source источник
comment
Кроме того, удаление ведущих нулей с помощью parseInt('008').toString() очень неуклюже, рассмотрите возможность использования вместо этого RegExp   -  person Free Consulting    schedule 19.12.2010


Ответы (4)


Это задокументированное поведение: http://www.w3schools.com/jsref/jsref_parseInt.asp

Строки с начальным '0' анализируются, как если бы они были восьмеричными.

person Adam Vandenberg    schedule 19.12.2010
comment
Документы MDN, как правило, гораздо более высокого качества, чем их аналоги из w3schools. Вот соответствующая страница MDN. - person Matt Fenwick; 14.12.2012
comment
FireFox 21 любопытным образом решил удалить эту функцию. Chrome, по-видимому, был таким некоторое время: stackoverflow.com/questions/14542377 - person Patrick M; 15.05.2013

Вы должны указать основание числа (основание)

parseInt('01', 10);
person Sergey Akopov    schedule 19.12.2010
comment
Да, и инструмент контроля качества кода JS, такой как JSLint (jslint.com), может дать вам информацию об этом. :) - person Andrew Whitaker; 19.12.2010

Число с префиксом нуля обрабатывается как восьмеричное.

person osgx    schedule 19.12.2010
comment
Это не вся история — это браузер и зависит от версии. - person Matt Fenwick; 14.12.2012

На самом деле это не ошибка. По устаревшим причинам строки, начинающиеся с 0, интерпретируются в восьмеричном формате, а в восьмеричном нет цифры 8. Чтобы обойти это, вы должны явно передать систему счисления (например, parseInt("008", 10)).

person Paul Wheeler    schedule 19.12.2010