Функция parseInt в Javascript, похоже, не работает полностью.
parseInt("01") returns 1
parseInt("02") returns 2
parseInt("03") returns 3
parseInt("04") returns 4
parseInt("05") returns 5
parseInt("06") returns 6
parseInt("07") returns 7
parseInt("08") returns 0
parseInt("09") returns 0
Вы не можете этого объяснить. Попробуйте. (jsFiddle)
Изменить Поскольку этот вопрос был задан и дан ответ, "функция" по умолчанию для восьмеричного основания была устарела. [ 1 ] [ 2 ]
javascript
savinger
источник
источник
You can't explain that.
Да, вы можете => developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Ответы:
Это потому, что, если число начинается с «0», оно рассматривается как восьмеричное.
Вы можете форсировать базу, передав базу в качестве 2-го параметра.
Согласно документации , второй параметр является необязательным, но не всегда предполагается, что он равен 10, как вы можете видеть из своего примера.
источник
11
в базе 8 находится9
в базе 10.09
не является допустимым числом с основанием 8.При вызовах к
parseInt
всегда следует указывать базу во втором аргументе:Более ранние версии JavaScript обрабатывают строки, начинающиеся с
0
восьмеричной (если база не указана), и08
ни09
уважительных восьмеричные числа.Из документации Mozilla :
И из стандарта ECMAScript 3 :
Последняя версия JavaScript ( ECMAScript 5 ) отказывается от этого поведения , но вы все равно должны указать основание системы счисления, чтобы удовлетворить запросы старых браузеров.
источник
Есть параметр Radix
Где основание - это основание.
В этом случае вы оцениваете числа с основанием 10 (десятичные), поэтому используйте
источник
Похоже, это не совсем корректно в новых браузерах. Internet Explorer 9 и 10 вернет 8, если вы выполните 'parseInt ("08")', тогда как Internet Explorer 8 и предыдущие версии вернут 0 (IE10 в режиме совместимости также вернет 0).
Последняя версия Chrome также возвращает 8, поэтому они, должно быть, недавно изменили интерпретацию.
источник
Эта проблема сейчас устарела. Но вы все равно можете использовать radix in
parseInt
для преобразования числа других оснований в base-10. Например,возвращает
17
(который равен основанию 100010001
).источник
Совет: Как вы теперь знаете, когда по умолчанию используется восьмеричное число, больше не рекомендуется. Вот как это исправить в устаревших браузерах
источник
В большинстве браузеров проблема, похоже, изменилась.
Firefox 51.0.1 (64-разрядная версия)
Chrome 55.0.2883.95 (64-разрядная версия)
Safari 10.0 (12602.1.50.0.10)
=====
Рекомендуемая практика
Сказав это, чтобы быть в большей безопасности и избежать проблем, используйте параметр base / radix, как это предлагается в принятом ответе .
Дополнительный тест
Я просто хотел проверить это, если аргумент не является строкой. Chrome и Safari дают точный результат. Firefox тоже возвращает правильный результат, но с предупреждением.
источник