JavaScriptのBigInt
JavaScript BigInt変数は、通常のJavaScript数値で表現できない非常に大きな整数の値を保存するために使用されます。
JavaScriptの整数の精度
JavaScriptの整数は最大15桁まで正確です:
整数の精度
let x = 999999999999999; let y = 9999999999999999;
JavaScriptでは、すべての数値は64ビット浮動小数点フォーマット(IEEE 754標準)で保存されます。
この基準に従って、大整数は正確に表現できず、四捨五入されます。
したがって、JavaScriptは以下の範囲の整数のみを安全に表現できます:
- 最大は 9007199254740991(253-1)
- 最小は -9007199254740991(-(253-1))
この範囲を超える整数値は精度を失います。
BigIntの作成方法
BigIntを作成するには、整数の末尾に n
、または呼び出し BigInt()
関数:
例1
let x = 9999999999999999; let y = 9999999999999999n;
例2
let x = 1234567890123456789012345n; let y = BigInt(1234567890123456789012345);
BigInt:新しいJavaScriptデータ型
BigIntのJavaScriptの型は「bigint
「:」
例
let x = BigInt(999999999999999); let type = typeof x;
BigIntはJavaScriptの2番目の数値データ型です(Numberの次)。
BigIntの場合、JavaScriptがサポートするデータ型の合計数は8種類です:
- String
- Number
- Bigint
- Boolean
- Undefined
- Null
- Symbol
- Object
BigInt 演算子
JavaScript Number の演算子も BigInt に使用できます。
BigInt 乗法の例
let x = 9007199254740995n; let y = 9007199254740995n; let z = x * y;
注意
BigInt と Number 之间の算術演算(型変換は情報の損失が発生します)は許可されていません。
BigInt は固定の幅を持たないため、無符号右シフト操作(>>>)を実行することができません。
BigInt 小数
BigInt には小数がありません。
BigInt の除法インスタンス
let x = 5n; let y = x / 2; // エラー: BigInt と他の型を混ぜることができません、明示的な変換を使用してください。
let x = 5n; let y = Number(x) / 2;
BigInt 十六進数、八進数、および二進数
BigInt はまた、十六進数、八進数、または二進数の表現法で書かれることができます:
BigInt 十六進数インスタンス
let hex = 0x20000000000003n; let oct = 0o400000000000000003n; let bin = 0b100000000000000000000000000000000000000000000000000011n;
精度好奇心
舍入はプログラムのセキュリティを危険にさらす可能性があります:
MAX_SAFE_INTEGER インスタンス
9007199254740992 === 9007199254740993; // はい!!!
ブラウザのサポート
2020 年 9 月からすべてのブラウザが BigInt をサポートしています:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
2018 年 5 月 | 2020 年 1 月 | 2019 年 7 月 | 2020 年 9 月 | 2018 年 6 月 |
最小および最大安全整数
ES6 は Number オブジェクトに max と min 属性を追加しました:
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
MAX_SAFE_INTEGER インスタンス
let x = Number.MAX_SAFE_INTEGER;
MIN_SAFE_INTEGER インスタンス
let x = Number.MIN_SAFE_INTEGER;
新しい数字メソッド
ES6 は Number オブジェクトに 2 つの新しいメソッドを追加しました:
Number.isInteger()
Number.isSafeInteger()
Number.isInteger() メソッド
パラメータが整数である場合、Number.isInteger() メソッドは true
。
isInteger() インスタンス
Number.isInteger(10); Number.isInteger(10.5);
Number.isSafeInteger() メソッド
安全な整数は双精度数として正確に表現できる整数です。
パラメータが安全な整数である場合、Number.isSafeInteger() メソッドは true
。
isSafeInteger() インスタンス
Number.isSafeInteger(10); Number.isSafeInteger(12345678901234567890);
安全な整数は -(253 - 1) から +(253 - 1) のすべての整数。
これは安全な整数です:9007199254740991。これは安全な整数ではありません:9007199254740992。