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.

questionAnswers(2)

yourAnswerToTheQuestion