Returning 0 makes perfect sense. parseInt matches an integer from the beginning of the string, so it reads the 0 and then stops at the 8 because 8 is not a valid digit in base 8.
>>> parseInt("123foobar", 10)
123
> parseInt("08", 8);
returns 0 instead of NaN