此頁面由社群從英文翻譯而來。了解更多並加入 MDN Web Docs 社群。
BigInt
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2020年9月.
BigInt 是一個內建的物件,提供了表示大於 2^53 的整數的功能 (2^53 是 JavaScript 原生的Number能夠表示的最大值)
In this article
語法
BigInt(value);參數
value欲創建的數值,可以為整數或字串。
備註:BigInt() 不和new 一起使用。
說明
BigInt 是透過在一個數值後加上n ,例如10n ,或呼叫BigInt() 所生成的。
const theBiggestInt = 9007199254740991n;const alsoHuge = BigInt(9007199254740991);// ↪ 9007199254740991nconst hugeString = BigInt("9007199254740991");// ↪ 9007199254740991nconst hugeHex = BigInt("0x1fffffffffffff");// ↪ 9007199254740991nconst hugeBin = BigInt( "0b11111111111111111111111111111111111111111111111111111",);// ↪ 9007199254740991nBigInt 跟Number 很像,但在某些部分有些許不同 — 它不可以被用在內建的Math 物件方法中、而且不可以跟Number 的實體混用運算子。
警告:Number 和BigInt 不能混和計算 — 他們必須被轉換到同一個型態。
然而,在相互轉換時要注意,BigInt 在被轉換成Number 時可能會遺失部分精度的資訊。
類別資訊
當使用typeof 測試時,一個BigInt 會回傳 "bigint":
typeof 1n === "bigint"; // truetypeof BigInt("1") === "bigint"; // true當使用Object 來包裹時,BigInt 會被看成是普通的 "object" 型態:
typeof Object(1n) === "object"; // trueOperator
下列的運算子可以被用在BigInt 上 (或由 object 包裹的BigInt):+,*,-,**,%.
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);// ↪ 9007199254740991const maxPlusOne = previousMaxSafe + 1n;// ↪ 9007199254740992nconst theFuture = previousMaxSafe + 2n;// ↪ 9007199254740993n, this works now!const multi = previousMaxSafe * 2n;// ↪ 18014398509481982nconst subtr = multi – 10n;// ↪ 18014398509481972nconst mod = multi % 10n;// ↪ 2nconst bigN = 2n ** 54n;// ↪ 18014398509481984nbigN * -1n// ↪ –18014398509481984n/ 運算子也同樣的能夠運行。然而,因為型態是BigInt 而不是BigDecimal ,除法運算會無條件捨去小數。也就是說,回傳值不會包含小數部分。
警告:回傳值帶小數的運算在使用BigInt 時小數部分會被捨去。
const expected = 4n / 2n;// ↪ 2nconst rounded = 5n / 2n;// ↪ 2n, not 2.5n比較
一個BigInt 並不嚴格等於一個Number,但他們會一般相等。
0n === 0;// ↪ false0n == 0;// ↪ true一個Number 和BigInt 可以像普通運算一樣比較。
1n < 2;// ↪ true2n > 1;// ↪ true2 > 2;// ↪ false2n > 2;// ↪ false2n >= 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]Note that comparisons withObject-wrappedBigInts act as with other objects, only indicating equality when the same object instance is compared:
0n === Object(0n); // falseObject(0n) === Object(0n); // falseconst o = Object(0n);o === o; // trueConditional
ABigInt behaves like aNumber in cases where it is converted to aBoolean: via theBoolean function; when used with logical operatorsLogical Operators||,&&, and!; or within a conditional test like anif statement.
if (0n) { console.log("Hello from the if!");} else { console.log("Hello from the else!");}// ↪ "Hello from the else!"0n || 12n;// ↪ 12n0n && 12n;// ↪ 0nBoolean(0n);// ↪ falseBoolean(12n);// ↪ true!12n;// ↪ false!0n;// ↪ true方法
BigInt.asIntN()Clamps a BigInt value to a signed integer value, and returns that value.
BigInt.asUintN()Clamps a BigInt value to an unsigned integer value, and returns that value.
屬性
BigInt.prototype允許對一個
BigInt物件增加其屬性。
BigInt 物件實體
AllBigInt instances inherit fromBigInt.prototype. The prototype object of theBigInt constructor can be modified to affect allBigInt instances.
方法
BigInt.prototype.toLocaleString()Returns a string with a language-sensitive representation of this BigInt value. Overrides the
Object.prototype.toLocaleString()method.BigInt.prototype.toString()Returns a string representing this BigInt value in the specified radix (base). Overrides the
Object.prototype.toString()method.BigInt.prototype.valueOf()Returns this BigInt value. Overrides the
Object.prototype.valueOf()method.
建議用法
>轉型
因為在Number 和BigInt 之間轉換可能造成精度遺失,建議當數值會超過 2^53 時只使用BigInt ,而不要在兩者之間進行轉換。
加密
BigInt 支援的運算並非常數時間。因此BigInt不適用在加密學上。
範例
>計算質數
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 BigIntfunction 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規範
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-bigint-objects> |