さらに調べたところ、ECMAScript 仕様でこれを見つけました。
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
parseInt 関数が呼び出されると、次の手順が実行されます。
- inputString を ToString(string) とします。
- S を、StrWhiteSpaceChar ではない最初の文字とその文字に続くすべての文字で構成される、inputString の新しく作成された部分文字列とします。(つまり、先頭の空白を削除します。) inputString にそのような文字が含まれていない場合、S を空の文字列とします。
- 符号を 1 とします。
- S が空ではなく、S の最初の文字がマイナス記号 - の場合、sign を -1 とします。
- S が空ではなく、S の最初の文字がプラス記号 + またはマイナス記号 - である場合、S から最初の文字を削除します。
- R = ToInt32(radix) とします。
- stripPrefix を true にします。
- R 0 の場合、© Ecma International 2011 105 a. R < 2 または R > 36 の場合、NaN を返します。b. R 16 の場合、stripPrefix を false にします。
- そうでなければ、R = 0 a. R = 10 とします。
- stripPrefix が true の場合、a. S の長さが少なくとも 2 で、S の最初の 2 文字が「0x」または「0X」のいずれかである場合、S から最初の 2 文字を削除し、R = 16 とします。
- S に基数 R の数字ではない文字が含まれている場合、Z をそのような最初の文字の前のすべての文字で構成される S の部分文字列とします。それ以外の場合は、Z を S とします。
- Z が空の場合、NaN を返します。
- mathInt を、10 から 35 までの値の数字に文字 AZ および az を使用して、基数 R 表記の Z によって表される数学的な整数値とします。 20 桁目以降の数字は、実装のオプションで 0 の数字に置き換えることができます; R が 2、4、8、10、16、または 32 でない場合、mathInt は実装依存の数学的整数の近似値である可能性があります基数 R 表記の Z で表される値。)
- number を mathInt の Number 値とします。
- 戻り記号 番号。注 parseInt は、文字列の先頭部分のみを整数値として解釈する場合があります。整数の表記の一部として解釈できない文字は無視され、そのような文字が無視されたことは示されません。
parseFloat 関数が呼び出されると、次の手順が実行されます。
- inputString を ToString(string) とします。
- trimmedString を、StrWhiteSpaceChar ではない左端の文字とその文字の右側のすべての文字で構成される inputString の部分文字列とします。(つまり、先頭の空白を削除します。) inputString にそのような文字が含まれていない場合は、trimmedString を空の文字列にします。
- trimmedString も trimmedString のプレフィックスも StrDecimalLiteral の構文を満たさない場合 (9.3.1 を参照)、NaN を返します。
- numberString を、StrDecimalLiteral の構文を満たす、trimmedString 自体である可能性がある、trimmedString の最長のプレフィックスとします。
- numberString の MV の Number 値を返します。
注 parseFloat は、文字列の先頭部分のみを数値として解釈する場合があります。10 進数リテラルの表記の一部として解釈できない文字は無視され、そのような文字が無視されたことは示されません。
引数が NaN に強制される場合は true を返し、それ以外の場合は false を返します。
- ToNumber(number) が NaN の場合、true を返します。
- それ以外の場合は false を返します。注: 値 X が NaN であるかどうかを ECMAScript コードでテストする信頼できる方法は、X !== X の形式の式です。結果は、X が NaN である場合にのみ true になります。