1. まず「Numberって何?」
- JavaScript の数値は プリミティブ(基本型) です。普通に
let x = 10;のように使います。 - でも
Numberは「数値を包むオブジェクト(ラッパー)」を作るためのものです。new Number(10)とするとobjectになります。 - 実際は ほとんどの場合
newを使わずにプリミティブのまま(Number()や数値リテラル)で扱います。オブジェクト化すると挙動が変わるので注意。
2. プリミティブ vs Numberオブジェクト(例)
let a = 10; // プリミティブ number
let b = new Number(10); // Number オブジェクト
console.log(typeof a); // "number"
console.log(typeof b); // "object"
console.log(a == b); // true (== は自動で b をプリミティブに変換して比較)
console.log(a === b); // false (型が違うので厳密比較は false)
JavaScriptポイント:
Number()(関数呼び出し)はプリミティブ数値を返し、new Number() はオブジェクトを返します。たとえば Number("123") → 123、new Number("123") → Number {123}。
3. よく使うメソッド(実例)
valueOf():Numberオブジェクトの中のプリミティブ値を取り出す
let obj = new Number(10);
console.log(obj.valueOf()); // 10
JavaScripttoString():文字列に変換toFixed(digits):小数点以下の桁数を指定して文字列で返す(四捨五入)
let n = 123.456;
console.log(n.toFixed(2)); // "123.46"
JavaScripttoExponential()/toPrecision()も有用(科学表記や有効桁数指定)。
補足:プリミティブの数値に対しても
n.toFixed(...)のように呼べます。これは JS が一時的にラッパー(Numberオブジェクト)を裏で作る(自動ボクシング)ためです。
4. 重要な定数(Number の静的プロパティ)
Number.MAX_SAFE_INTEGER:安全に扱える最大の整数(= 253−12^{53} – 1253−1)
計算:まず 253=90071992547409922^{53} = 9007199254740992253=9007199254740992、よってMAX_SAFE_INTEGER = 2^53 - 1 = 9007199254740991。
Number.MAX_SAFE_INTEGER === 9007199254740991 // true
JavaScriptNumber.MIN_SAFE_INTEGER:-9007199254740991Number.MAX_VALUE:表現できる最大の正の数(約1.7976931348623157e+308)Number.MIN_VALUE:表現できる最小の正の数(0 に最も近い正の値、約5e-324)Number.NaN、Number.POSITIVE_INFINITY、Number.NEGATIVE_INFINITY
なぜ「安全な整数」が必要?
JavaScript の数値は IEEE-754 の倍精度浮動小数点で表現されます。この形式だと、整数でもある範囲(±(2^53−1))を超えると正確に表現できないため、誤差や思わぬ結果が出ます。
例(浮動小数点と丸めの問題):
console.log(0.1 + 0.2); // 0.30000000000000004(0.3 にならない)
JavaScript5. よくある落とし穴(初心者がつまずくポイント)
new Number(10) === 10は false(型が違う)
→ ほとんどのケースでnew Numberを使う必要はありません。NaNの扱い:typeof NaNは"number"になります(これが混乱の元)。isNaN("hello")はtrue(非数に変換して判定するため)Number.isNaN("hello")はfalse(引数をそのまま判定)
よって 厳密に NaN を判定するならNumber.isNaN()を使う。
- 浮動小数点誤差(例:0.1 + 0.2)と安全な整数の超過(
Number.isSafeInteger()で判定可能)。 Infinityに注意。非常に大きな数を扱うとInfinityになります:
console.log(Number.MAX_VALUE * 2); // Infinity
JavaScript6. 判定系ユーティリティ(よく使うもの)
Number.isNaN(value):値が厳密にNaNかNumber.isFinite(value):値が有限か(Infinity/-Infinityではない)Number.isInteger(value):整数かNumber.isSafeInteger(value):安全な整数か(先ほどの ±9007199254740991 の範囲内か)
7. 大きすぎる整数を扱いたい時
- ES2020 以降は BigInt(例:
123n)が使えます。安全な整数範囲を超える整数を正確に扱えます。
ただし、BigIntとNumberの間で直接計算はできません(1n + 2はエラー)。用途に応じて使い分けてください。
8. 初心者向けの練習(3つ)
0.1 + 0.2を実行して出力を確認し、toFixed(2)で切り捨て/丸めして比べてみる。Number.MAX_SAFE_INTEGER + 1とNumber.MAX_SAFE_INTEGER + 2を比較してみる(Number.isSafeInteger(...)で判定)。Number("123abc")とparseInt("123abc", 10)の違いを試す(どちらが数になるか)。
まとめ
- 普段はただの
number(プリミティブ)を使う。new Number()は滅多に必要ない。 Numberは便利な定数とメソッドを持つ(MAX_SAFE_INTEGERやtoFixed等)。- 浮動小数点の丸め誤差と「安全な整数」の概念は必ず押さえる(
2^53 - 1 = 9007199254740991)。 - より大きな整数は
BigIntを検討。

