#数値オブジェクト

概要

Number オブジェクトは数値に対応するラッパー オブジェクトであり、コンストラクターまたはユーティリティ関数として使用できます。

コンストラクターとして、値が数値であるオブジェクトを生成するために使用されます。

var n = 新しい数値(1);
typeof n // "オブジェクト"

上記のコードでは、Number オブジェクトがコンストラクターとして使用され、値 1 を持つオブジェクトを返します。

ユーティリティ関数として、あらゆる種類の値を数値に変換できます。

数値(真) // 1

上記のコードは、ブール値「true」を数値「1」に変換します。ツール関数としての Number の使用方法については、「データ型変換」の章を参照してください。

静的プロパティ

Number オブジェクトには次の静的プロパティがあります (つまり、インスタンスではなく Number オブジェクトに直接定義されたプロパティ)。

  • Number.POSITIVE_INFINITY: Infinity を指す正の無限大。
  • Number.NEGATIVE_INFINITY: -Infinity を指す負の無限大。
  • Number.NaN: NaN を指す非数値を示します。
  • Number.MIN_VALUE: 最小の正の数 (つまり、0 に最も近い正の数、64 ビット浮動小数点数系では 5e-324 ) を表します。これに対応して、0 に最も近い負の数は次のとおりです。 -Number.MIN_VALUE
  • Number.MAX_SAFE_INTEGER: 正確に表現できる最大の整数、つまり 9007199254740991 を表します。
  • Number.MIN_SAFE_INTEGER: 正確に表現できる最小の整数、つまり -9007199254740991 を表します。
Number.POSITIVE_INFINITY // 無限大
Number.NEGATIVE_INFINITY // -無限大
Number.NaN // NaN

Number.MAX_VALUE
// 1.7976931348623157e+308
Number.MAX_VALUE < 無限大
// 真実

Number.MIN_VALUE
// 5e-324
数値.MIN_VALUE > 0
// 真実

Number.MAX_SAFE_INTEGER // 9007199254740991
Number.MIN_SAFE_INTEGER // -9007199254740991

##インスタンスメソッド

「Number」オブジェクトには 4 つのインスタンス メソッドがあり、すべて値を指定された形式に変換することに関連しています。

Number.prototype.toString()

Number オブジェクトは、数値を文字列形式に変換するために使用される独自の toString メソッドを展開します。

(10).toString() // "10"

toString メソッドは、出力ベースを示すパラメータを受け入れることができます。このパラメータを省略した場合、値はデフォルトで 10 進数に変換されてから文字列が出力されます。それ以外の場合、数値はパラメータで指定された基数に基づいて特定の基数の文字列に変換されます。

(10).toString(2) // "1010"
(10).toString(8) // "12"
(10).toString(16) // "a"

上記のコードでは、「10」を括弧で囲む必要があります。これは、次のドットが呼び出し元オブジェクトのプロパティを示すことを示します。括弧が含まれていない場合、この点は JavaScript エンジンによって小数点として解釈され、エラーが報告されます。

10.toString(2)
// SyntaxError: 予期しないトークン ILLEGAL

JavaScript エンジンが小数点とオブジェクトのドット演算子を混同しない限り、すべての記述方法を使用できます。 10 に括弧を追加するだけでなく、10 の後に 2 つのドットを追加することもできます。JavaScript は最初のドットを小数点 (つまり 10.0) として認識し、2 番目のドットを呼び出しオブジェクトのプロパティとして認識します。正しい結果が得られます。

10..toString(2)
// "1010"

// 他のメソッドには次のものがあります
10 .toString(2) // "1010"
10.0.toString(2) // "1010"

これが実際に意味するのは、10 進数に対して toString メソッドを直接使用できるということです。

10.5.toString() // "10.5"
10.5.toString(2) // "1010.1"
10.5.toString(8) // "12.4"
10.5.toString(16) // "a.8"

toString メソッドは、角括弧演算子を通じて呼び出すこともできます。

10['toString'](2) // "1010"

toString メソッドは、10 進数を他の基数の文字列に変換することしかできません。他の基数の数値を 10 進数に変換し直す場合は、parseInt メソッドを使用する必要があります。

Number.prototype.toFixed()

toFixed() メソッドは、まず数値を指定された桁数の小数に変換し、次にその小数に対応する文字列を返します。

(10).toFixed(2) // "10.00"
10.005.toFixed(2) // "10.01"

上記のコードでは、「10」と「10.005」はまず小数点以下 2 桁に変換されてから文字列に変換されます。このうち「10」は括弧で囲わないと以下の点が小数点として扱われます。

toFixed() メソッドのパラメータは小数点以下の桁数で、有効範囲は 0 ~ 100 です。この範囲を超えると RangeError エラーがスローされます。

浮動小数点数のため、小数点「5」の丸めは定義されていないため、注意して使用する必要があります。

(10.055).toFixed(2) // 10.05
(10.005).toFixed(2) // 10.01

Number.prototype.toExponential()

toExponential メソッドは、数値を科学表記法に変換するために使用されます。

(10).toExponential() // "1e+1"
(10).toExponential(1) // "1.0e+1"
(10).toExponential(2) // "1.00e+1"

(1234).toExponential() // "1.234e+3"
(1234).toExponential(1) // "1.2e+3"
(1234).toExponential(2) // "1.23e+3"

toExponential メソッドのパラメータは、0 ~ 100 の範囲の小数点以下の有効桁数です。この範囲を超えると、RangeError エラーがスローされます。

Number.prototype.toPrecision()

Number.prototype.toPrecision() メソッドは、数値を指定された有効桁数に変換するために使用されます。

(12.34).toPrecision(1) // "1e+1"
(12.34).toPrecision(2) // "12"
(12.34).toPrecision(3) // "12.3"
(12.34).toPrecision(4) // "12.34"
(12.34).toPrecision(5) // "12.340"

このメソッドのパラメータは、1 ~ 100 の範囲の有効桁数です。この範囲外では RangeError がスローされます。

この方法は、丸めに使用する場合には信頼性が低く、浮動小数点数が正確に格納されないという事実に関連しています。

(12.35).toPrecision(3) // "12.3"
(12.25).toPrecision(3) // "12.3"
(12.15).toPrecision(3) // "12.2"
(12.45).toPrecision(3) // "12.4"

Number.prototype.toLocaleString()

Number.prototype.toLocaleString() メソッドは、地域コードをパラメータとして受け取り、その地域の現在の番号のローカル表記を表す文字列を返します。

(123).toLocaleString('zh-Hans-CN-u-nu-hanidec')
// "1 2 3"

このメソッドは、2 番目のパラメーター構成オブジェクトを受け入れて、指定された目的に応じて戻り文字列をカスタマイズすることもできます。このオブジェクトの style 属性は出力スタイルを指定します。デフォルト値は 10 進数形式で出力することを意味する 10 進数 です。値が percent の場合、出力のパーセントを意味します。

(123).toLocaleString('zh-Hans-CN', { スタイル: 'パーセント' })
// "12,300%"

style 属性の値が currency の場合、currency 属性と組み合わせて、指定された形式で通貨文字列を出力できます。

(123).toLocaleString('zh-Hans-CN', { スタイル: '通貨', 通貨: 'CNY' })
// "¥123.00"

(123).toLocaleString('de-DE', { スタイル: '通貨', 通貨: 'EUR' })
// "123,00 ユーロ"

(123).toLocaleString('en-US', { スタイル: '通貨', 通貨: 'USD' })
// "$123.00"

Number.prototype.toLocaleString() が省略された場合、何を行うかはブラウザ次第で、通常はオペレーティング システムのロケール設定が使用されます。ブラウザが認識しない地域コードを使用すると、このメソッドはエラーをスローすることに注意してください。

(123).toLocaleString('123') // エラー

カスタムメソッド

他のオブジェクトと同様に、Number.prototype オブジェクトにカスタム メソッドを定義できます。これは、Number のインスタンスによって継承されます。

Number.prototype.add = 関数 (x) {
  これ + x を返します。
};

8['add'](2) // 10

上記のコードは、「Number」オブジェクト インスタンスの「add」メソッドを定義しています。値に対してメソッドが呼び出されるとき、値は自動的に Number のインスタンス オブジェクトに変換されるため、add メソッドを呼び出すことができます。 add メソッドは依然として数値を返すため、連鎖させることができます。

Number.prototype.subtract = 関数 (x) {
  これを返します - x;
};

(8).add(2).subtract(4)
// 6

上記のコードは、Number オブジェクトのインスタンスに subtract メソッドをデプロイします。これは、add メソッドとチェーンで呼び出すことができます。

より複雑なメソッドを展開することもできます。

Number.prototype.iterate = function () {
  var 結果 = [];
  for (var i = 0; i <= this; i++) {
    result.push(i);
  }
  結果を返します。
};

(8).iterate()
// [0、1、2、3、4、5、6、7、8]

上記のコードは、Number オブジェクトのプロトタイプに iterate メソッドをデプロイして、値を自動的に配列にトラバースします。

数値のカスタム メソッドは、そのプロトタイプ オブジェクト Number.prototype でのみ定義できることに注意してください。数値自体はカスタム プロパティを持つことができません。

var n = 1;
n.x = 1;
n.x // 未定義

上記のコードでは、「n」はプリミティブ型の値です。新しい属性 x を直接追加してもエラーは報告されませんが、効果はなく、常に unknown を返します。これは、プロパティが呼び出されると、n が自動的に Number のインスタンス オブジェクトに変換され、呼び出しが完了するとオブジェクトが自動的に破棄されるためです。したがって、次に n の属性を呼び出すと、実際には別のオブジェクトが取得され、当然ながら属性 x を読み取ることはできません。


作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0