みなさん、こんにちは!日夜、ブラウザの向こう側でJavaScriptと格闘しているフロントエンド・チーフアーキテクトの「おにいさん」です。
突然ですが、JavaScriptでプログラミングをしていて、こんな不安を感じたことはありませんか?
「JavaScriptって、どこまで大きな数字を計算できるんだろう?」
「お買い物の合計金額を計算していたら、なんだか小数点以下に謎の細かい数字が出てきてズレちゃった……これって私のコードが悪いの?」
安心してください。まったく悪くありませんよ!それはJavaScriptという言語が裏側で「数字」を扱うときの、ちょっとした“クセ”の仕業なんです。
今回は、そんなJavaScriptの「数値(Number)」を取り巻く、頼もしくてちょっと個性的な8人の番人(静的プロパティ)たちをご紹介します。
専門書のような難しい数式は一切ナシ!身近な道具やお買い物のシーンに例えながら、現場の泥臭い知見も交えて、どこよりも優しくお話ししていきますね。お気に入りの飲み物を片手に、リラックスして読んでみてください。
—
そもそも「静的プロパティ」ってなに?
本題に入る前に、ちょっとだけ言葉の整理をしましょう。「静的プロパティ」なんて言われると、急に難しそうに聞こえますよね。
でも、イメージはとってもシンプルです。
JavaScriptには、数値を扱うための「Number(ナンバー)」という大きな道具箱が用意されています。
この道具箱の引き出しに、最初から「いつでも使える便利なお札」のようにペタッと貼られている決まり文句(定数)のこと。これが静的プロパティです。
新しく数字を作らなくても、`Number.〇〇` と道具箱の名前を直接指定するだけで、いつでもその値を呼び出すことができます。
それでは、この道具箱の中にいる「8人の番人」を順番に見ていきましょう!
—
1. 安全な計算の限界を決める「MAX_SAFE_INTEGER」と「MIN_SAFE_INTEGER」
まずは、私たちが日々お買い物やゲームのスコア計算などで、「絶対にバグらせずに、安心して計算できる限界」を教えてくれる2人です。
- `Number.MAX_SAFE_INTEGER`(安全に扱える最大の整数)
- `Number.MIN_SAFE_INTEGER`(安全に扱える最小の整数)
💡 身近なイメージ:電卓の「桁数制限」
昔ながらの電卓を思い浮かべてみてください。液晶画面に数字が入り切らなくなると、計算がおかしくなったりエラーになったりしますよね。
JavaScriptにも「この桁数までなら、1の位まで1ミリもズレずに正確に計算できますよ!」という限界があります。
それがこの2つです。具体的な数字は以下の通り。
- 最大値: `9,007,199,254,740,991`(約9000兆!)
- 最小値: `-9,007,199,254,740,991`(約マイナス9000兆!)
「えっ、そんなに大きいの?じゃあ普段の開発なら全然気にしなくていいね!」
と思いましたか?
基本的にはその通りなのですが、現代のWeb開発では、SNSの「投稿ID」や「ユーザーID」のような、ものすごく長い桁数の数字をサーバーから受け取ることがあります。
その時にこの限界をうっかり超えてしまうと、「IDの末尾が勝手に書き換わって、別人のデータが表示される」という、背筋が凍るようなバグが起きるんです。
「あれ?数字が勝手に丸められてる?」と思ったら、この2人の限界を超えていないか確認してみてくださいね。
—
2. JavaScriptの限界の限界「MAX_VALUE」と「MIN_VALUE」
次は、JavaScriptが気合で表現できる「究極の限界値」です。
- `Number.MAX_VALUE`(表現できる最大の数値)
- `Number.MIN_VALUE`(表現できる最小の数値)
⚠️ 初学者が100%引っかかる「MIN_VALUE」の罠!
ここで、現場の先輩たちも昔一度は引っかかった超・重要ポイントがあります。
「`MIN_VALUE`って、マイナスのものすごく小さい値のことでしょ?」
…そう思ってしまいますよね。でも、実は違うんです!
`Number.MIN_VALUE` は、「0より大きい、正の数の中で、これ以上小さくできない極小の数」のこと。
💡 身近なイメージ:顕微鏡の世界
- `Number.MAX_VALUE` は、「宇宙の果て」。これ以上大きな数字は、JavaScriptでは扱えません。
- `Number.MIN_VALUE` は、「顕微鏡でしか見えない、0に極限まで近いチリ」のようなもの。マイナスではなく、ギリギリプラスの超小さな世界です。
もし「マイナスの最大値」を表現したいときは、シンプルに `-Number.MAX_VALUE` とマイナスを頭につければOKですよ。
—
3. 計算のズレを許す心の広さ「EPSILON(エプシロン)」
現場で一番お世話になり、かつ初心者が「えっ!?」と驚くのがこのプロパティです。
- `Number.EPSILON`(1と、1より大きい最小の浮動小数点数との差)
言葉は難しいですが、要するに「JavaScriptの計算のズレを許してあげるための、ものすごく小さな隙間(約2.2京分の一)」です。
💡 身近なイメージ:0.1 + 0.2 が 0.3 にならないミステリー
JavaScriptで、試しに `0.1 + 0.2` を計算させてみてください。
普通は `0.3` になるはずですよね?でも、パソコンに計算させると……
`0.30000000000000004`
という、なんとも微妙な隙間が生まれてしまいます。
「え、パソコンなのに計算ミスするの!?」とショックを受けるかもしれませんが、これはパソコンが数字を「2進数(0と1)」で計算しているために起きる、避けては通れない「誤差」なんです。
このとき、「この微小な誤差(EPSILON)の範囲内なら、実質同じ『0.3』ってことで許してあげようよ」という、優しい判定をするためにこの `Number.EPSILON` を使います(使い方はこの後のサンプルコードで紹介しますね)。
—
4. 宇宙の果て、その先へ「POSITIVE_INFINITY」と「NEGATIVE_INFINITY」
どれだけ大きな数字でも、限界を超えるとどうなるでしょうか?
JavaScriptは、エラーで止まるのではなく「無限(インフィニティ)」という概念に突入します。
- `Number.POSITIVE_INFINITY`(正の無限大: `Infinity`)
- `Number.NEGATIVE_INFINITY`(負の無限大: `-Infinity`)
💡 身近なイメージ:終わりのない旅
例えば、ある数を `0` で割ってしまったり、`Number.MAX_VALUE` よりもさらに大きな掛け算をしたりすると、この「無限大」の領域にたどり着きます。
「これ以上はもう、数え切れません!」という、JavaScriptからのお手上げサインだと思ってください。
—
5. 数字の皮をかぶった迷子「NaN(ナノ/エヌエーエヌ)」
最後は、JavaScriptを触っていると誰もが一度は遭遇する、大人気(?)のキャラクターです。
- `Number.NaN`(Not-a-Number:数値ではない)
名前は「数値ではない(Not a Number)」ですが、データ型としては「数値型(Number)」に分類されるという、ちょっとあまのじゃくな存在です。
💡 身近なイメージ:「りんご」ひく「みかん」は?
「100」から「りんご」を引く計算をしてみてください、と言われたら困ってしまいますよね。
このように、「計算しようとしたけれど、どうしても数値として成り立たない、おかしな結果になっちゃった!」という時に、この `NaN` という迷子が登場します。
「あなたの計算、どこかおかしなことになってますよ」と教えてくれる、親切なアラート役なんですね。
—
実際に動かして確かめてみよう!(実践コード)
それでは、ここまでご紹介した8人の番人たちを、実際のJavaScriptコードで動かしてみましょう!
このコードをそのままコピーして、ブラウザの開発者ツール(F12キーを押して「コンソール」を開く)やエディタに貼り付けて実行してみてください。
// ==========================================================
// Numberオブジェクトの静的プロパティたちを体験してみよう!
// ==========================================================
// 1. 安全な計算の限界(MAX_SAFE_INTEGER / MIN_SAFE_INTEGER)
const maxSafe = Number.MAX_SAFE_INTEGER;
const minSafe = Number.MIN_SAFE_INTEGER;
console.log(“① 安全に計算できる最大値:”, maxSafe); // 9007199254740991
console.log(“② 安全に計算できる最小値:”, minSafe); // -9007199254740991
// 【実験】限界を超えるとどうなる?
// 安全な最大値に「+1」と「+2」をしてみます。
console.log(“限界 + 1:”, maxSafe + 1); // 9007199254740992 (あってる)
console.log(“限界 + 2:”, maxSafe + 2); // 9007199254740992 (あれ?同じになっちゃった!)
// ズレましたね!これが「安全ではない」という意味です。大丈夫、知っていれば怖くありません。
// 2. JavaScriptが表現できる究極の限界(MAX_VALUE / MIN_VALUE)
console.log(“③ 表現できる最大値:”, Number.MAX_VALUE); // 1.7976931348623157e+308(ものすごくデカい!)
console.log(“④ 0に一番近い正の数:”, Number.MIN_VALUE); // 5e-324(ほぼ0だけど、マイナスではないよ)
// 3. 計算のズレを許す(EPSILON)
const result = 0.1 + 0.2;
console.log(“0.1 + 0.2 の結果:”, result); // 0.30000000000000004
// 誤差を許容して「ほぼ0.3」かどうかを判定するプロの書き方
const isNearlyEqual = Math.abs(result – 0.3) < Number.EPSILON;
console.log("これは実質 0.3 と言ってもいいよね?:", isNearlyEqual); // true
// 4. 無限の世界(POSITIVE_INFINITY / NEGATIVE_INFINITY)
// 普通の数字を 0 で割ると、無限になります
const infinitePlus = 100 / 0;
const infiniteMinus = -100 / 0;
console.log("⑤ 正の無限大:", infinitePlus); // Infinity (Number.POSITIVE_INFINITY と同じ)
console.log("⑥ 負の無限大:", infiniteMinus); // -Infinity (Number.NEGATIVE_INFINITY と同じ)
// 5. 計算できなかった迷子(NaN)
const impossibleCalc = "りんご" 5; // 文字列と数字の掛け算
console.log("⑦ 計算結果は?:", impossibleCalc); // NaN
// 「これはNaN(計算エラー)かな?」とチェックするときは Number.isNaN を使います
console.log("⑧ これはNaNですか?:", Number.isNaN(impossibleCalc)); // true
---
まとめ:焦らなくて大丈夫。困った時に思い出して。
今回のポイントを、もう一度おさらいしましょう。
1. `MAX_SAFE_INTEGER` / `MIN_SAFE_INTEGER`: IDの桁数などがこれを超えないか気をつけよう!
2. `MAX_VALUE` / `MIN_VALUE`: JavaScriptの物理的な限界。`MIN_VALUE`はマイナスではなく「超小さいプラスの数」だよ。
3. `EPSILON`: `0.1 + 0.2` のような、小数のズレを優しく許すためのもの。
4. `POSITIVE_INFINITY` / `NEGATIVE_INFINITY`: 0で割ったりすると現れる「無限大」。
5. `NaN`: 「数値じゃないよ」という、計算ミスの目印。
これらを全部暗記する必要はまったくありません!
「そういえば、JavaScriptの数値にはいろんな限界やクセがあったな」と頭の片隅に置いておくだけで、いつかバグに直面したときに、「あ、あの時の番人を呼ぼう!」とピンと閃くはずです。
一歩ずつ、あなたのペースで楽しくコードを書いていきましょう。困ったときは、いつでもこの道具箱を開いてみてくださいね。
あなたのフロントエンド開発が、もっと楽しく、もっとスムーズに進むことを応援しています!

コメント