BigInt は組み込みのオブジェクトで、Numberで表現できる最大の数 (253 ) より大きい数値を表現できます。

記法

BigInt(value);

パラメーター

value
作成されるオブジェクトの値です。文字列、もしくは整数を指定できます。

Note: BigInt()new 演算子と共に用いることはできません。

説明

A BigInt は10進数の整数リテラルに n をつけるか (10n)BigInt() 関数を呼ぶことで作成できます。

const theBiggestInt = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n

const hugeString = BigInt("9007199254740991");
// ↪ 9007199254740991n

const hugeHex = BigInt("0x1fffffffffffff");
// ↪ 9007199254740991n

const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// ↪ 9007199254740991n

基本的に Number と同様に扱えますが、いくつかの点で異なります。Math のメソッド利用する場合、Number のインスタンスと混ぜて計算できません。

NumberBigInt とを演算中に混ぜることはできません。どちらかに統一するする必要があります。

BigIntNumber へ変換する際には精度が落ちることがあります。値を変換する際には注意が必要です。

型情報

typeofBigInt に対する評価値は、"bigint" となります。

typeof 1n === 'bigint'; // true
typeof BigInt('1') === 'bigint'; // true

Object でラップされている場合は、BigInt は通常の "object" として扱われます: 

typeof Object(1n) === 'object'; // true

演算子

BigInt (もしくは object でラップされた BigInt) に対して、次の演算子を利用できます: +, `*`, `-`, `**`, `%` .

const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
// ↪ 9007199254740991

const maxPlusOne = previousMaxSafe + 1n;
// ↪ 9007199254740992n
 
const theFuture = previousMaxSafe + 2n;
// ↪ 9007199254740993n, this works now!

const multi = previousMaxSafe * 2n;
// ↪ 18014398509481982n

const subtr = multi – 10n;
// ↪ 18014398509481972n

const mod = multi % 10n;
// ↪ 2n

const bigN = 2n ** 54n;
// ↪ 18014398509481984n

bigN * -1n
// ↪ –18014398509481984n

 / 演算子もすべての数値に対して、期待される通りに働きます。ただ BigIntBigDecimal ではないため、演算結果は 0  で丸められます。別の言い方をすれば、小数を返すことはありません。

BigInt を使用した場合、結果が小数となるような演算は丸められます。

const expected = 4n / 2n;
// ↪ 2n

const rounded = 5n / 2n;
// ↪ 2n, not 2.5n

比較

BigIntNumber と厳密等価ではありませんが、等価となります。

0n === 0
// ↪ false

0n == 0
// ↪ true

NumberBigInt は通常通り比較できます。

1n < 2
// ↪ true

2n > 1
// ↪ true

2 > 2
// ↪ false

2n > 2
// ↪ false

2n >= 2
// ↪ true

配列の要素に混在させることでき、並べ替えも可能です。

const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
// ↪  [4n, 6, -12n, 10, 4, 0, 0n]

mixed.sort();
// ↪ [-12n, 0, 0n, 10, 4n, 4, 6]

なお、Object にラップされた BigInt は他のオブジェクトと同様の振る舞いをします。同じインスタンス同士が比較された場合にのみ、等価となります:

0n === Object(0n); // false
Object(0n) === Object(0n); // false

const o = Object(0n);
o === o // true

条件分岐

Boolean への変換される場合、BigIntNumber と同様に振舞います。 Boolean 関数を利用した場合、論理演算子  ||、`&&`、! の対象となる場合、そして if 文 などの条件式に使用される場合、変換されます。

if (0n) {
  console.log('Hello from the if!');
} else {
  console.log('Hello from the else!');
}

// ↪ "Hello from the else!"

0n || 12n
// ↪ 12n

0n && 12n
// ↪ 0n

Boolean(0n)
// ↪ false

Boolean(12n)
// ↪ true

!12n
// ↪ false

!0n
// ↪ true

メソッド

BigInt.asIntN()
値を -2width-1 and 2width-1-1 の間に丸めます。
BigInt.asUintN()
値を BigInt between 0 and 2width-1 の間に丸めます。

属性

BigInt.prototype
BigInt オブジェクトへの属性追加が可能です。.

BigInt インスタンス

全ての BigInt インスタンスは BigInt.prototype を継承します。この prototype オブジェクトへの変更は、全ての BigInt インスタンスに影響します。

メソッド

BigInt.prototype.toLocaleString()
Returns a string with a language sensitive representation of this number. Overrides the Object.prototype.toLocaleString() method.
BigInt.prototype.toString()
Returns a string representing the specified object in the specified radix (base). Overrides the Object.prototype.toString() method.
BigInt.prototype.valueOf()
Returns the primitive value of the specified object. Overrides the Object.prototype.valueOf() method.

 

使用例

素数の計算

function isPrime(p) {
  for (let i = 2n; i * i <= p; i++) {
    if (p % i === 0n) return false;
  }
  return true;
}

// Takes a BigInt as an argument and returns a BigInt
function nthPrime(nth) {
  let maybePrime = 2n;
  let prime = 0n;
  
  while (nth >= 0n) {
    if (isPrime(maybePrime)) {
      nth -= 1n;
      prime = maybePrime;
    }
    maybePrime += 1n;
  }
  
  return prime;
}

nthPrime(20n)
// ↪ 73n

ドキュメントのタグと貢献者

このページの貢献者: mdnwebdocs-bot, chikoski
最終更新者: mdnwebdocs-bot,