parseInt („010”, 10); vs. parseInt (010, 10);
Jestem zdezorientowany co do konkretnego wynikuparseInt
. Myślałem, że zrozumiałem większość jego dziwactw, ale ten jest niejasny.
parseInt("010", 10); // 10
parseInt(010, 10); // 8, but expecting 10
W drugim przykładzie podałem prawidłową podstawę. Jaki jest powód nieoczekiwanego wyniku?
Rozwiązanie
Problem dotyczy literału ósemkowego. Gdy liczba jest poprzedzona cyfrą 0, jest postrzegana jako literał ósemkowy.
Jeśli wykonasz
console(010); // 8
w trybie bez skryptu otrzymasz 8. Powodem, dla którego parseInt ma to, co uważałem za dziwne zachowanie, było to, że w zasadzie wykonałem
parseInt(8, 10); // 8
i oczekując 10.
ParseInt nigdy nie widział 010, tylko 8. Dziękujemy wszystkim za pomoc.