翻譯不完整。請協助 翻譯此英文文件

這是一個實驗中的功能
此功能在某些瀏覽器尚在開發中,請參考兼容表格以得到不同瀏覽器用的前輟。

BigInt 是一個內建的物件,提供了表示大於253的整數的功能 (253是JavaScript原生的Number能夠表示的最大值)

語法

BigInt(value);

參數

value
欲創建的數值,可以為整數或字串。

Note: BigInt() 不和 new 一起使用。

說明

BigInt 是透過在一個數值後加上 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

BigInt 跟 Number 很像,但在某些部分有些許不同 — 它不可以被用在內建的 Math 物件方法中、而且不可以跟 Number 的實體混用運算子。

Number 和 BigInt 不能混和計算 — 他們必須被轉換到同一個型態。

然而,在相互轉換時要注意, BigInt 在被轉換成 Number 時可能會遺失部分精度的資訊。

類別資訊

當使用 typeof 測試時,一個 BigInt 會回傳 "bigint":

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

當使用 Object 來包裹時,BigInt 會被看成是普通的 "object" 型態:

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

Operators

下列的運算子可以被用在 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

/ 運算子也同樣的能夠運行。然而,因為型態是 BigInt 而不是 BigDecimal ,除法運算會無條件捨去小數。也就是說,回傳值不會包含小數部分。

回傳值帶小數的運算在使用BigInt  時小數部分會被捨去。

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

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

比較

一個 BigInt 並不嚴格等於一個 Number,但他們會一般相等。

0n === 0
// ↪ false

0n == 0
// ↪ true

一個 Number 和 BigInt 可以像普通運算一樣比較。

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]

Note that comparisons with Object-wrapped BigInts act as with other objects, only indicating equality when the same object instance is compared:

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

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

Conditionals

A BigInt behaves like a Number in cases where it is converted to a Boolean: via the Boolean function; when used with logical operators Logical Operators ||, &&, and !; or within a conditional test like an if statement.

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()
Wraps a BigInt between -2width-1 and 2width-1-1
BigInt.asUintN()
Wraps a BigInt between 0 and 2width-1

屬性

BigInt.prototype
允許對一個 BigInt 物件增加其屬性。

BigInt 物件實體

All BigInt instances inherit from BigInt.prototype. The prototype object of the BigInt constructor can be modified to affect all BigInt instances.

方法

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.

建議用法

轉型

因為在 Number 和 BigInt 之間轉換可能造成精度遺失,建議當數值會超過253時只使用 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 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

規範

規範 狀態
BigInt Stage 3

瀏覽器相容性

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
BigInt
Experimental
Chrome Full support 67Edge No support NoFirefox Full support 68IE No support NoOpera Full support 54Safari No support NoWebView Android Full support 67Chrome Android Full support 67Edge Mobile ? Firefox Android Full support 68Opera Android Full support 48Safari iOS No support NoSamsung Internet Android No support Nonodejs Full support 10.4.0

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
Experimental. Expect behavior to change in the future.
Experimental. Expect behavior to change in the future.

另見

文件標籤與貢獻者

此頁面的貢獻者: hmysjiang
最近更新: hmysjiang,