Я думаю вопрос в том, почему после восемнадцатиричной системы Infinity преобразуется в 18?
alert(parseInt(Infinity, 16)); // → NaN
alert(parseInt(Infinity, 17)); // → NaN
alert(parseInt(Infinity, 18)); // → NaN
alert(parseInt(Infinity, 19)); // → 18
alert(parseInt(Infinity, 20)); // → 18
alert(parseInt(Infinity, 21)); // → 18
На самом деле все просто: в девятнадцатиричной системе число 18 кодируется буквой «i», а функция parseInt преобразует Infinity в строку
alert(parseInt("i", 19)); // → 18
alert(parseInt("ixyz", 19)); // → 18
до девятнадцатиричной системы в начале строки «infinity» не находилось буквы, которой соответствовало бы число
16: 0123456789abcdef
17: 0123456789abcdefg
18: 0123456789abcdefgh
19: 0123456789abcdefghi