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種類です:

  1. String
  2. Number
  3. Bigint
  4. Boolean
  5. Undefined
  6. Null
  7. Symbol
  8. 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。