本頁の目次 目次

15.7 Number オブジェクト (Number Objects)

15.7.1 関数として呼ばれる Number コンストラクタ (The Number Constructor Called as a Function)

コンストラクタではなく関数として呼出される Number は、型変換を行う。

15.7.1.1 Number ( [ value ] )

value が供給されれば ToNumber(value) により算出した (Number オブジェクトではなく) 数値を返し、供給されなければ +0 を返す。

15.7.2 Number コンストラクタ (The Number Constructor)

new 式の一部として呼出される Number はコンストラクタである: 新規に生成したオブジェクトを初期化する。

15.7.2.1 new Number ( [ value ] )

新規に構築されたオブジェクトの [[Prototype]] プロパティは、 Number.prototype (セクション 15.7.3.1) の初期値である、オリジナルの Number プロトタイプオブジェクトに設定される。

新規に構築されたオブジェクトの [[Class]] プロパティは、 "Number" に設定される。

新規に構築されたオブジェクトの [[Value]] プロパティは、 value が供給されるならば ToNumber(value) に、そうでなければ +0 に設定される。

15.7.3 Number コンストラクタのプロパティ (Properties of the Number Constructor)

Number コンストラクタの内部 [[Prototype]] プロパティの値は、 Function プロトタイプオブジェクト (セクション 15.3.4) である。

内部プロパティと length プロパティ (値は 1) の他に、 Number コンストラクタは次のプロパティを持つ:

15.7.3.1 Number.prototype

Number.prototype の初期値は Number プロトタイプオブジェクト (セクション 15.7.4) である。

このプロパティは、属性 { DontEnum, DontDelete, ReadOnly } である。

15.7.3.2 Number.MAX_VALUE

Number.MAX_VALUE の値は、Number 型の正の有限数の最大値であり、おおよそ 1.7976931348623157 × 10308 である、

このプロパティは、属性{ DontEnum, DontDelete, ReadOnly } を持つ。

15.7.3.3 Number.MIN_VALUE

Number.MIN_VALUE の値は Number 型の正の最小値であり、おおよそ 5 × 10-324.

このプロパティは、属性 { DontEnum, DontDelete, ReadOnly } である。

15.7.3.4 Number.NaN

Number.NaN の値は NaN である。

このプロパティは、属性 { DontEnum, DontDelete, ReadOnly } である。

15.7.3.5 Number.NEGATIVE_INFINITY

Number.NEGATIVE_INFINITY の値は、 -∞ である。

このプロパティは、属性 { DontEnum, DontDelete, ReadOnly } である。

15.7.3.6 Number.POSITIVE_INFINITY

Number.POSITIVE_INFINITY の値は、 +∞ である。

このプロパティは、属性 { DontEnum, DontDelete, ReadOnly } である。

15.7.4 Number プロトタイプオブジェクトのプロパティ (Properties of the Number Prototype Object)

Number プロトタイプオブジェクト は、それ自身 値が +0 の Number オブジェクト ([[Class]] が "Number") である。

Number プロトタイプオブジェクトの内部 [[Prototype]] プロパティの値は、 Object プロトタイプオブジェクト (セクション 15.2.3.1) である。

以降、 Number プロトタイプオブジェクトのプロパティである関数の説明において、フレーズ "この Number オブジェクト" は、関数の呼出しにとっての this 値であるオブジェクトを参照する; this 値がオブジェクトではなく、内部 [[Class]] プロパティの値が "Number" ならば、例外 TypeError が投げられる。 また、フレーズ "この数値" は、この Number オブジェクトであらわされる数値、つまり、この Number object の内部 [[Value]] プロパティの値を参照する。

15.7.4.1 Number.prototype.constructor

Number.prototype.constructor の初期値は、組込み Number コンストラクタである。

15.7.4.2 Number.prototype.toString (radix)

radix が数 10 または undefined ならば、この数値は引数として ToString 演算子に与えられる; 結果の文字列値が返される。

radix が 2 から 36 の整数で、 10 でないならば、結果は文字列で、実装依存の選択となる。

toString 関数は汎用的ではない; this 値が Number オブジェクトでなければ、例外 TypeError を投げる。それゆえ、他の種類のオブジェクトにメソッドとして転用できない。

15.7.4.3 Number.prototype.toLocaleString()

ホスト環境の現在のロケールの慣習に沿って整形される Number の値を表す文字列値を生成する。この関数は実装依存で、 toString と同じものを返すことを許可されているが推奨もされない。

NOTE この関数の第一パラメータは、この標準の将来のバージョンで使用される可能性がある; 実装はこのパラメータを他の用途に使用しないことを推奨する。

15.7.4.4 Number.prototype.valueOf ( )

この数値を返す。

valueOf 関数は汎用的ではない; this 値が Number オブジェクトでなければ、例外 TypeError を投げる。それゆえ、他の種類のオブジェクトにメソッドとして転用できない。

15.7.4.5 Number.prototype.toFixed (fractionDigits)

小数点の後の fractionDigits 個の数字にって数を固定点表記 (fixed-point notation) する文字列を返す。 fractionDigits が undefined ならば、 0 が仮定される。 具体的には、次のステップを実行する:

  1. f を ToInteger(fractionDigits) とする。 (fractionDigits が undefined ならば、 このステップは値 0 を生成する)
  2. f < 0 または f > 20 ならば、 例外 RangeError を投げる。
  3. x を この数値 とする。
  4. x が NaN ならば、文字列 "NaN" を返す。
  5. s を空文字列とする。
  6. x ≥ 0 ならば、 ステップ 9 へ。
  7. s を "-" とする。
  8. x = - x とする。
  9. x ≥ 1021 ならば、 m = ToString(x) とし、 ステップ 20 へ。
  10. n を、 n ÷ 10f - x の 厳密な数学値が可能な限り 0 に近いような整数とする。そのような n が 2 個あれば、大きい方を n とする。
  11. n = 0 ならば、 m を文字列 "0" とする。 そうでなければ、 m を、 n を 10 進数であらわす数字で構成される文字列とする (順序で 0 は先行しない)。
  12. f = 0 ならば、 ステップ 20 へ。
  13. km の文字数とする。
  14. k > f ならば、 ステップ 18 へ。
  15. z を、 f + 1 - k 個の文字 '0' で構成される文字列とする。
  16. m を文字列 zm の連結とする。
  17. k = f + 1 とする。
  18. a を m の先頭の k - f 個の文字とし、 bm の残りの f 個の文字とする。
  19. m を 3 個の文字列 a, ".", b の連結とする。
  20. 文字列 sm の連結を返す。

toFixed メソッドの length プロパティは 1 である。

toFixed メソッドが、 2 個以上の引数で呼出されるならば、振る舞いは未定義である (セクション 15 参照)。

実装は、 0 未満や 20 より大きい fractionDigits の値に対する toFixed の振る舞いの拡張を許可される。この場合、 toFixed はそのような値に対し RangeError を投げる必要はない。

NOTE toFixed の出力は、値によっては toString より正確でよく、それは toString が隣接した数値から数を区別するのに十分な桁数を出力するだけだからである。例えば、 (1000000000000000128).toFixed(0) が "1000000000000000128" を返す一方で、 (1000000000000000128).toString() は "1000000000000000100" を返す。

15.7.4.6 Number.prototype.toExponential (fractionDigits)

1 個の数字、小数点、 fractionDigits 個の数字によって数を指数表記する文字列を返す。 fractionDigits が undefined ならば、数を一意に特定するのに必要とするのと同じ桁数を含む (この場合、数が指数表記で常に出力される点を除き ToString に似ている)。 具体的には、次のステップを実行する:

  1. x をこの数値とする。
  2. f を ToInteger(fractionDigits) とする。
  3. x が NaN ならば、文字列 "NaN" を返す。
  4. s を空文字列とする。
  5. x ≥ 0 ならば、 ステップ 8 へ。
  6. s を "-" とする。
  7. x = - x とする。
  8. x = +∞ ならば、 m = "Infinity" として、ステップ 30 へ。
  9. fractionDigits が undefined ならば、 ステップ 14 へ。
  10. f < 0 または f > 20 ならば、 例外 RangeError を投げる。
  11. x = 0 ならば、 ステップ 16 へ。
  12. en を、10fn < 10f+1 かつ 厳密な n × 10e-f - x の数学値が可能な限り 0 に接近するような整数とする。そのような en の組が 2 組あるならば、 n × 10e-f が大きい方の en を採用する。
  13. ステップ 20 へ。
  14. x ≠ 0 ならば、 ステップ 19 へ。
  15. f = 0 とする。
  16. mf+1 個の文字 '0' で構成される文字列とする。
  17. e = 0 とする。
  18. ステップ 21 へ。
  19. e, n, f を、 f ≥ 0, 10fn < 10f+1, n × 10e-f の数値が x, かつ, 可能な限り小さい f であるような整数とする。 n の10 進数表記が f+1 個の数字を持つこと、 n は 10 で割り切れないこと、 n の最小桁の数字は、これらの判定基準によって一意的に決定される必要がないことに注意。
  20. m を、 n の 10 進数表記の数字で構成される文字列 (順序として 0 は先行しない) とする。
  21. f = 0 ならば、 ステップ 24 へ。
  22. a を m の先頭の文字、 bm の残りの f 個の文字とする。
  23. m を、 3 個の文字列 a, ".", b の連結とする。
  24. e = 0 ならば、c = "+" , d = "0" として、 ステップ 29 へ。
  25. e > 0 ならば、c = "+" として、ステップ 28 へ。
  26. c = "-" とする。
  27. e = - e とする。
  28. d を、 e の 10 進数表記の数字で構成される文字列 (順序として 0 は先行しない) とする。
  29. m を、 4 個の文字列 m, "e", c, d の連結とする。
  30. 文字列 sm の連結を返す。

toExponential メソッドの length プロパティは 1 である。

toExponential メソッドが 2 個以上の引数で呼出されるならば、その振る舞いは未定義である (セクション 15 参照)。

実装は、 fractionDigits が 0 より小さい場合、また 20 より大きい場合の toExponential の振る舞いの拡張を許可される。この場合 toExponential はその値に例外 RangeError を投げる必要はない。

NOTE 上記の規則の要求よりもより精密な取り決めを提供する実装については、ステップ 19 の次の代替バージョンをガイドラインとして用いることを推奨する:

e, n, f を、 f ≥ 0, 10fn < 10f+1, n × 10e-f の数値が x, かつ, 可能な限り小さい f であるような整数とする。複数の n が存在可能であれば、 n × 10e-fx の値に最も近いような n の値を選択する。可能な n の値が 2 個あれば、偶数である方を選択する。

15.7.4.7 Number.prototype.toPrecision (precision)

1 個の数字、小数点、 precision-1 個の数字による指数表記、または precision 桁の数字による固定点表記の一方であらわされる数を含む文字列を返す。 precision が undefined ならば、代わりに ToString (セクション 9.8.1) を呼出す。具体的には、次のステップを実行する:

  1. x をこの数値とする。
  2. precision が undefined ならば、 ToString(x) を返す。
  3. p を ToInteger(precision) とする。
  4. x が NaN ならば、 the string "NaN" を返す。
  5. s を空文字列とする。
  6. x ≥ 0 ならば、 ステップ 9 へ。
  7. s を "-" とする。
  8. x = - x とする、
  9. x = +∞ ならば、 m = "Infinity" として、ステップ 30 へ。
  10. p < 1 または p > 21 ならば、 例外 RangeError を投げる。
  11. x ≠ 0 ならば、 ステップ 15 へ。
  12. mp 個の文字 '0' で構成される文字列とする。
  13. e = 0 とする。
  14. ステップ 18 へ。
  15. en を、 10p-1 ≤ n < 10p であり、かつ n × 10e-p+1 - x の厳密な数学値が可能な限り 0 に近いような整数とする。 en の組が 2 個存在するならば、 n × 10e-p+1 が大きい方の en を採用する。
  16. m を、 n の 10 進数表記の数字で構成される文字列 (順序として 0 は先行しない) とする。
  17. e < -6 または e ( p ならば、 ステップ 22 へ。
  18. e = p-1 ならば、 ステップ 30 へ。
  19. e ≥ 0 ならば、 m を、 m の最初の e+1 個の文字, 文字 '.', m の残り p- (e+1) 個の文字 の連結として、 ステップ 30 へ。
  20. m を文字列 "0.", -(e+1) 個の文字 '0', 文字列 m の連結とする。
  21. ステップ 30 へ。
  22. a を m の最初の文字とし、 bm の残りの p-1 個の文字とする。
  23. m を、 3 個の文字列 a, ".", b の連結とする。
  24. e = 0 ならば、 c = "+" , d = "0" として、ステップ 29 へ。
  25. e > 0 ならば、 c = "+" として、ステップ 28 へ。
  26. c = "-" とする。
  27. e = - e とする。
  28. d を、 e の 10 進数表記の数字で構成される文字列 (順序として 0 は先行しない) とする。
  29. m を4 個の文字列 m, "e", c, d の連結とする。
  30. 文字列 sm の連結を返す。

toPrecision メソッドの length プロパティは 1 である。

toPrecision メソッドが 2 個以上の引数で呼出されるならば、その振る舞いは未定義である (セクション 15 参照)。

実装は、 precision の値が 0 より小さい場合、また 21 より大きい場合の toPrecision の振る舞いの拡張を許可される。この場合 toPrecision はその値に例外 RangeError を投げる必要はない。

15.7.5 Number インスタンスのプロパティ (Properties of Number Instances)

Number インスタンスは、Number プロトタイプオブジェクトから継承するプロパティの上に特にプロパティを持たない。

Page Contents

Issued: / Revised: / All rights reserved. © 2002-2016 TAKI