BigInt プリミティブは、JavaScript に比較的新しく追加されたプリミティブであり、Number
で許可されている範囲外の数値に対して数学演算を行うことができます。BigInt を作成するには、数値リテラルの末尾に n
を追加するか、整数または数値の文字列値を BigInt()
関数に渡します。
const myNumber = 9999999999999999;
const myBigInt = 9999999999999999n;
typeof myNumber;
> "number"
typeof myBigInt;
> "bigint"
myNumber;
> 10000000000000000
myBigInt;
> 9999999999999999n
この例では、9999999999999999
が Number
で安全に表現できる桁数の範囲外であるため、丸めエラーが発生します。
BigInt 値は、Number
オブジェクトが提供するメソッドとプロパティを継承しません。また、JavaScript の組み込み Math
オブジェクトが提供するメソッドでは使用できません。最も重要な点は、BigInt プリミティブと Number プリミティブを標準の算術演算に混在させることができないことです。
9999999999999999n + 5
> Uncaught TypeError: can't convert BigInt to number
BigInts で算術を行うには、両方のオペランドを BigInt 値として定義する必要があります。
console.log( 9999999999999999 + 10 ); // Off by one
> 10000000000000010
console.log( 9999999999999999n + 10n );
> 10000000000000009n