9

可能であれば、Javascript で事前定義された関数の基になるコードを確認する最善の方法は何ですか。これらがどのようにコーディングされたかを示すドキュメント、または基になるコードを実際に表示する簡単な方法はありますか?

  • parseInt
  • parseFloat
  • isNaN
4

3 に答える 3

7

これらはネイティブ関数であり、JS エンジンが記述された言語でコーディングされている可能性があります。そのソースに連絡する必要があります。

しかし、アルゴリズムがどのように機能するかを説明しているEcmaScript の仕様の方に関心があるでしょう。

運が良ければ、関数によっては同等の JS が見つかるかもしれません。それらは主に、標準に対して ES 実装をテストするページで見つけることができます。

于 2013-03-20T20:40:37.933 に答える
3

さらに調べたところ、ECMAScript 仕様でこれを見つけました。 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

parseInt 関数が呼び出されると、次の手順が実行されます。

  1. inputString を ToString(string) とします。
  2. S を、StrWhiteSpaceChar ではない最初の文字とその文字に続くすべての文字で構成される、inputString の新しく作成された部分文字列とします。(つまり、先頭の空白を削除します。) inputString にそのような文字が含まれていない場合、S を空の文字列とします。
  3. 符号を 1 とします。
  4. S が空ではなく、S の最初の文字がマイナス記号 - の場合、sign を -1 とします。
  5. S が空ではなく、S の最初の文字がプラス記号 + またはマイナス記号 - である場合、S から最初の文字を削除します。
  6. R = ToInt32(radix) とします。
  7. stripPrefix を true にします。
  8. R  0 の場合、© Ecma International 2011 105 a. R < 2 または R > 36 の場合、NaN を返します。b. R  16 の場合、stripPrefix を false にします。
  9. そうでなければ、R = 0 a. R = 10 とします。
  10. stripPrefix が true の場合、a. S の長さが少なくとも 2 で、S の最初の 2 文字が「0x」または「0X」のいずれかである場合、S から最初の 2 文字を削除し、R = 16 とします。
  11. S に基数 R の数字ではない文字が含まれている場合、Z をそのような最初の文字の前のすべての文字で構成される S の部分文字列とします。それ以外の場合は、Z を S とします。
  12. Z が空の場合、NaN を返します。
  13. mathInt を、10 から 35 までの値の数字に文字 AZ および az を使用して、基数 R 表記の Z によって表される数学的な整数値とします。 20 桁目以降の数字は、実装のオプションで 0 の数字に置き換えることができます; R が 2、4、8、10、16、または 32 でない場合、mathInt は実装依存の数学的整数の近似値である可能性があります基数 R 表記の Z で表される値。)
    1. number を mathInt の Number 値とします。
    2. 戻り記号  番号。注 parseInt は、文字列の先頭部分のみを整数値として解釈する場合があります。整数の表記の一部として解釈できない文字は無視され、そのような文字が無視されたことは示されません。

parseFloat 関数が呼び出されると、次の手順が実行されます。

  1. inputString を ToString(string) とします。
  2. trimmedString を、StrWhiteSpaceChar ではない左端の文字とその文字の右側のすべての文字で構成される inputString の部分文字列とします。(つまり、先頭の空白を削除します。) inputString にそのような文字が含まれていない場合は、trimmedString を空の文字列にします。
  3. trimmedString も trimmedString のプレフィックスも StrDecimalLiteral の構文を満たさない場合 (9.3.1 を参照)、NaN を返します。
  4. numberString を、StrDecimalLiteral の構文を満たす、trimmedString 自体である可能性がある、trimmedString の最長のプレフィックスとします。
  5. numberString の MV の Number 値を返します。

注 parseFloat は、文字列の先頭部分のみを数値として解釈する場合があります。10 進数リテラルの表記の一部として解釈できない文字は無視され、そのような文字が無視されたことは示されません。

引数が NaN に強制される場合は true を返し、それ以外の場合は false を返します。

  1. ToNumber(number) が NaN の場合、true を返します。
  2. それ以外の場合は false を返します。注: 値 X が NaN であるかどうかを ECMAScript コードでテストする信頼できる方法は、X !== X の形式の式です。結果は、X が NaN である場合にのみ true になります。
于 2013-03-20T20:43:15.983 に答える
0

これらの関数は、ブラウザーに依存する実装固有であり、JS で作成されていません (誰かが JS でブラウザー エンジンを作成することに決めた場合を除きます)。コードが環境間で同じであるとは限りませんが、(理論的には) その動作について ECMAScript 仕様に準拠する必要があります。

于 2013-03-20T20:43:28.993 に答える