Originally Posted by

**http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.2.2**
15.1.2.2 parseInt (string , radix)

The parseInt function produces an integer value dictated by interpretation of the contents of the string argument according to the specified radix. Leading white space in string is ignored. If radix is undefined or 0, it is assumed to be 10 except when the number begins with the character pairs 0x or 0X, in which case a radix of 16 is assumed. If radix is 16, the number may also optionally begin with the character pairs 0x or 0X.

When the parseInt function is called, the following steps are taken:

Let inputString be ToString(string).

Let S be a newly created substring of inputString consisting of the first character that is not a StrWhiteSpaceChar and all characters following that character. (In other words, remove leading white space.) If inputString does not contain any such characters, let S be the empty string.

Let sign be 1.

If S is not empty and the first character of S is a minus sign -, let sign be −1.

If S is not empty and the first character of S is a plus sign + or a minus sign -, then remove the first character from S.

Let R = ToInt32(radix).

Let stripPrefix be true.

If R ≠ 0, then

If R < 2 or R > 36, then return NaN.

If R ≠ 16, let stripPrefix be false.

Else, R = 0

Let R = 10.

If stripPrefix is true, then

If the length of S is at least 2 and the first two characters of S are either “0x” or “0X”, then remove the first two characters from S and let R = 16.

If S contains any character that is not a radix-R digit, then let Z be the substring of S consisting of all characters before the first such character; otherwise, let Z be S.

If Z is empty, return NaN.

Let mathInt be the mathematical integer value that is represented by Z in radix-R notation, using the letters A-Z and a-z for digits with values 10 through 35. (However, if R is 10 and Z contains more than 20 significant digits, every significant digit after the 20th may be replaced by a 0 digit, at the option of the implementation; and if R is not 2, 4, 8, 10, 16, or 32, then mathInt may be an implementation-dependent approximation to the mathematical integer value that is represented by Z in radix-R notation.)

Let number be the Number value for mathInt.

Return sign × number.

NOTEparseInt may interpret only a leading portion of string as an integer value; it ignores any characters that cannot be interpreted as part of the notation of an integer, and no indication is given that any such characters were ignored.