Спробуйте виконати таке в 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 має хорошу рецензію .
10
(десятковий), за винятком випадків, коли число для розбору встановлено з префіксом 0x
, наприклад 0xFF
, у цьому випадку базовий параметр за замовчуванням до 16. Сподіваємось, одного дня ця проблема буде віддаленою пам’яттю.
+'08' === 8
? Правда! Можливо, вам справді потрібен parseInt
ваш справжній код, але не вище.
Number('08')
0
або undefined
і рядок починається з 0
цифри, за якою не йде x
або X
, або реалізація може, на власний розсуд, інтерпретувати число як вісімкове або як десяткове. Реалізації рекомендується інтерпретувати числа в цьому випадку як десяткові. " ( мій акцент)