Попробуйте выполнить следующее в JavaScript:
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
Я только что понял, как JavaScript считает, что начальный ноль указывает восьмеричное целое число , и поскольку в base-8 нет "8"
или "9"
, функция возвращает ноль. Как ни крути, это по замыслу .
Какие обходные пути?
Примечание: ради полноты я собираюсь опубликовать решение, но это решение, которое я ненавижу, поэтому, пожалуйста, оставляйте другие / лучшие ответы.
Обновление:
В 5-м издании стандарта JavaScript ( ECMA-262 ) вводятся серьезные изменения, устраняющие это поведение. У Mozilla хорошая рецензия .