Number.MAX_SAFE_INTEGER
Number.MAX_SAFE_INTEGER
定数は、JavaScript における安全な整数の最大値 (2^53 - 1
) を表します。
もっと大きな整数には、 BigInt
を使用することを検討してください。
試してみましょう
Number.MAX_SAFE_INTEGER のプロパティ属性 |
|
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 不可 |
解説
MAX_SAFE_INTEGER
定数は 9007199254740991
(9,007,199,254,740,991) である値です。その数である理由は JavaScript が IEEE 754 で指定されたとおり倍精度浮動小数点型数値を使用し安全に -(2^53 - 1)
と 2^53 - 1
との間の数を表すことができるからです。
この文脈で示している安全とは、整数を正確に表現し、正しく比較する能力を指します。たとえば、 Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2
は、数学的には不正確ですが true と評価されます。詳細については Number.isSafeInteger()
を見てください。
このフィールドは古いブラウザーには存在しません。 Math.max(Number.MAX_SAFE_INTEGER, 2)
のように存在を確認せずに使用すると、 NaN のような望ましくない結果が得られます。
MAX_SAFE_INTEGER
は Number
の静的なプロパティなので、自ら生成した Number
オブジェクトのプロパティとしてではなく、常に Number.MAX_SAFE_INTEGER
として使うようにしてください。
ポリフィル
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
仕様書
Specification |
---|
ECMAScript Language Specification # sec-number.max_safe_integer |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
Number.MAX_SAFE_INTEGER
のポリフィルはcore-js
で利用できますNumber.MIN_SAFE_INTEGER
Number.isSafeInteger()
BigInt