Попробуйте выполнить следующее в 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 считает, что начальный ноль указывает восьмеричное целое число, и поскольку нет "8"
или "9"
в базе-8 функция возвращает ноль. Нравится вам это или нет, это по дизайну.
Каковы обходные пути?
Примечание. Для полноты я собираюсь опубликовать решение, но это решение, которое я ненавижу, поэтому, пожалуйста, напишите другие/лучшие ответы.
Обновление:
5-е издание стандарта JavaScript (ECMA-262) вводит нарушение, которое устраняет это поведение. Mozilla имеет хорошую запись.