— y2sunlight 2021-07-26
Numberオブジェクトは数値型( number )を扱うためのラッパーオブジェクトです。
JavaScriptでは、以下の特殊な数値を Numberオブジェクトのプロパティが保持しています。
ECMA標準では、これらの特殊な値はグローバル変数 (NaN と Infinity) としても定義されていますが、Numberオブジェクトの静的プロパティでも同じ値が保持されています。
NaN に対する演算は、特殊な振舞いをします。NaN を含むどんな演算もその結果は NaN になります。例えば、NaN + 1
は NaN になり、NaN == 1
は false になります。最も混乱させるのは、NaN == NaN
の結果が false になるということです。従って、NaN には比較演算子を適用することが出来ません。この理由から、NaN を判定する特別な関数 isNaN() が提供されています。
Numberオブジェクトはコンストラクタによって以下の様に生成されます。
let number = new Number(1); console.log(typeof(number)); // object
このコンストラクタは Numberオブジェクトを返しますが、あまり使用されることはなく、Number() 関数の方が良く使用されます。
let number = Number(1); console.log(typeof(number)); // number
両者の違いは、Numberオブジェクトを返すか、基本データ型( number )を返すかの違いであり、厳密には異なりますが、実務上それは意識する必要がほとんどありません。
詳しくはMDNをご覧下さい。
メンバー | 概要 |
---|---|
Number.EPSILON | 計算機 ε(イプシロン)と呼ばれる1より大きい最小の数と1との差 |
Number.MIN_VALUE | 正の数の最小値 |
Number.MAX_VALUE | 正の数の最大値 |
Number.MIN_SAFE_INTEGER | 整数の最小値 -(253 - 1) |
Number.MAX_SAFE_INTEGER | 整数の最大値 253 - 1 |
Number.NaN | 非数(Not a Number)の値 |
Number.NEGATIVE_INFINITY | 負の最大値を表す値(オーバーフロー時に返されます) |
Number.POSITIVE_INFINITY | 正の最大値を表す値(オーバーフロー時に返されます) |
以下に主な Numberオブジェクトの静的メソッドの使用例を示します。詳しくはMDNをご覧下さい。
Number.isNaN(value)
引数が NaN(Not a Number)且つ number型の場合、true を返します。NaN については前の項を参照して下さい。
var x = 123; var ret = Number.isNaN(x); console.log(ret); // false var x = 1.23; var ret = Number.isNaN(x); console.log(ret); // false var x = '123'; var ret = Number.isNaN(x); console.log(ret); // false var x = 'abc'; var ret = Number.isNaN(x); console.log(ret); // false (NaN 且つ 非number型) var x = 1 / 0; var ret = Number.isNaN(x); console.log(ret); // false (Infinity) var x = 0 / 0; var ret = Number.isNaN(x); console.log(ret); // true (NaN 且つ number型)
Number.isNaN() 以外にグローバル関数の isNaN() もあります。この関数は引数が NaN のみを判定し、引数のデータ型には依存しません。
console.log(isNaN(123)); // false console.log(isNaN(1.23)); // false console.log(isNaN('123')); // false console.log(isNaN('abc')); // true (NaN 且つ 非number型) console.log(isNaN(1/0)); // false (Infinity) console.log(isNaN(0/0)); // true (NaN 且つ number型)
Number.isFinite(value)
引数が有限数( finity )の場合、true を返します。有限数でない値(infinity)については前の項を参照して下さい。
var x = 123; var ret = Number.isFinite(x); console.log(ret); // true var x = 1.23; var ret = Number.isFinite(x); console.log(ret); // true var x = '123'; var ret = Number.isFinite(x); console.log(ret); // false (非number型) var x = 'abc'; var ret = Number.isFinite(x); console.log(ret); // false (非number型) var x = 1 / 0; var ret = Number.isFinite(x); console.log(ret); // false (Infinity) var x = 0 / 0; var ret = Number.isFinite(x); console.log(ret); // false (NaN)
Number.isFinite() 以外にグローバル関数の isFinite() もあります。
Number.isInteger(value)
引数が整数の場合、true を返します。
var x = 123; var ret = Number.isInteger(x); console.log(ret); // true var x = 1.23; var ret = Number.isInteger(x); console.log(ret); // false var x = '123'; var ret = Number.isInteger(x); console.log(ret); // false (非number型) var x = 'abc'; var ret = Number.isInteger(x); console.log(ret); // false (非number型) var x = 1 / 0; var ret = Number.isInteger(x); console.log(ret); // false (Infinity) var x = 0 / 0; var ret = Number.isInteger(x); console.log(ret); // false (NaN)
Number.parseFloat(string)
引数の文字列を浮動小数点数( float )に変換します。グローバル関数の parseFloat と同じです。
var x = 2; var ret = Number.parseFloat(x) * 2.0 * 3.14; console.log(ret); // 12.56 var x = 2; var ret = parseFloat(x) * 2.0 * 3.14; console.log(ret); // 12.56
Number.parseInt(string,[ radix])
引数の文字列を指定された基数の整数に変換します。
var x = 10; var ret = Number.parseInt(x, 2); // 2進数を10進数へ変換 console.log(ret); // 2 var x = 10; var ret = Number.parseInt(x, 8); // 8進数を10進数へ変換 console.log(ret); // 8 var x = 10; var ret = Number.parseInt(x, 16); // 16進数を10進数へ変換 console.log(ret); // 16 var x = '123'; var ret = Number.parseInt(x, 10); // 10進数の文字列をを整数に変換 console.log(ret); // 123 var x = 12.3; var ret = Number.parseInt(x, 10); // 浮動小数点数から整数に変換 console.log(ret); // 12 var x = 'abc'; var ret = Number.parseInt(x, 10); // 文字は整数に変換できない console.log(ret); // NaN
上の例はグローバル関数 parseInt を使用した場合でも同様になります。
var x = 10; var ret = parseInt(x, 2); console.log(ret); // 2
以下に主な Numberオブジェクトのインスタンスメソッドの使用例を示します。詳しくはMDNをご覧下さい。
numObj.toString([radix])
Numberオブジェクトを文字列に変換します。
var x = new Number(123); var ret = x.toString(); console.log(ret); // 123 var x = new Number(1.23); var ret = x.toString(); console.log(ret); // 1.23 var x = new Number(1 / 0); var ret = x.toString(); console.log(ret); // Infinity var x = new Number(0 / 0); var ret = x.toString(); console.log(ret); // NaN
numObj.toLocaleString([locales [, options]])
Numberオブジェクトをロケールに応じた形式に変換します。JavaScriptで数値をカンマ編集したい場合は、このメソッドが利用出来ます。
var x = new Number(1234.56); var ret = x.toLocaleString(); console.log(ret); // 1,234.56
numObj.toFixed([digits])
Numberオブジェクトを指定された固定小数点表記に変換します。
var x = new Number(1234.56); var ret = x.toFixed(3); console.log(ret); // 1234.560
numObj.toPrecision([precision])
Numberオブジェクトを指定された精度の文字列に変換します。
var x = new Number(1234.56); var ret = x.toPrecision(5); console.log(ret); // 1234.6
numObj.toExponential([fractionDigits])
Numberオブジェクトを指定された指定表記に変換します。
var x = new Number(1234.56); var ret = x.toExponential(2); console.log(ret); // 1.23e+3
numObj.valueOf()
Numberオブジェクトのプリミティブ値を返します。
var x = new Number(1234.56); var ret = x.valueOf(); console.log(ret); // 1234.56
入力された値または計算結果が数値であるか否かを判定(バリデーション)する場合は isNaN()またはisFinite()を使用した様々な方法がありますが、当サイトでは以下のisFinite()を使った方法で数値のバリデーションを行うことを推奨します。
var x = 123; var ret = Number.isFinite(Number(x)); console.log(ret); // true var x = 1.23; var ret = Number.isFinite(Number(x)); console.log(ret); // true var x = '123'; var ret = Number.isFinite(Number(x)); console.log(ret); // true var x = 'abc'; var ret = Number.isFinite(Number(x)); console.log(ret); // false (NaN) var x = 1 / 0; var ret = Number.isFinite(Number(x)); console.log(ret); // false (Infinity) var x = 0 / 0; var ret = Number.isFinite(Number(x)); console.log(ret); // false (NaN)
isNaN()を使った方法では 1 / 0
の判定ができません(isNaN()はtrueを返す)。入力時のバリデーションに対してはいずれの方法を使用してもバリデーションできると思います。