Number.MAX_SAFE_INTEGER

Number.MAX_SAFE_INTEGER 定数は、JavaScript における安全な整数の最大値 (253 - 1) を表します。

もっと大きな整数には、 BigInt を使用することを検討してください。

Number.MAX_SAFE_INTEGER のプロパティ属性
書込可能 不可
列挙可能 不可
設定可能 不可

解説

MAX_SAFE_INTEGER 定数は 9007199254740991 (9,007,199,254,740,991) である値です。その数である理由は JavaScript が IEEE 754 で指定されたとおり倍精度浮動小数点型数値を使用し安全に -(253 - 1)253 - 1 との間の数を表すことができるからです。

この文脈で示している安全とは、整数を正確に表現し、正しく比較する能力を指します。たとえば、 Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 は、数学的には不正確ですが true と評価されます。詳細については Number.isSafeInteger() を見てください。

このフィールドは古いブラウザーには存在しません。 Math.max(Number.MAX_SAFE_INTEGER, 2) のように存在を確認せずに使用すると、 NaN のような望ましくない結果が得られます。

MAX_SAFE_INTEGERNumber の静的なプロパティなので、自ら生成した Number オブジェクトのプロパティとしてではなく、常に Number.MAX_SAFE_INTEGER として使うようにしてください。

Polyfill

if (!Number.MAX_SAFE_INTEGER) {
    Number.MAX_SAFE_INTEGER = 9007199254740991; // Math.pow(2, 53) - 1;
}

MAX_SAFE_INTEGER の返値

Number.MAX_SAFE_INTEGER; // 9007199254740991

安全な整数よりも大きな数値

浮動小数点の場合、ゼロのような正規の精度以下の場合を除いて、実際には10進数の末尾の "1" が値となるため、これは2を返します。

Number.MAX_SAFE_INTEGER * Number.EPSILON; // 2

仕様書

仕様書
ECMAScript (ECMA-262)
Number.MAX_SAFE_INTEGER の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
MAX_SAFE_INTEGERChrome 完全対応 34Edge 完全対応 12Firefox 完全対応 31IE 未対応 なしOpera 完全対応 21Safari 完全対応 9WebView Android 完全対応 ≤37Chrome Android 完全対応 34Firefox Android 完全対応 31Opera Android 完全対応 21Safari iOS 完全対応 9Samsung Internet Android 完全対応 2.0nodejs 完全対応 0.12

凡例

完全対応  
完全対応
未対応  
未対応

関連情報