JavaScript BigInt

JavaScript BigInt 变量用于存储太大而无法用普通 JavaScript 数字表示的大整数值。

JavaScript 整数精度

JavaScript 整数最多只能精确到 15 位:

整数精度

let x = 999999999999999;
let y = 9999999999999999;

Prova själv

在 JavaScript 中,所有数字都以 64 位浮点格式(IEEE 754 标准)存储。

根据此标准,大整数无法被精确表示,会被四舍五入。

因此,JavaScript 只能安全地表示以下范围内的整数:

  • 最大为 9007199254740991(253-1)
  • 最小为 -9007199254740991(-(253-1))

超出此范围的整数值会失去精度。

如何创建 BigInt

如需创建 BigInt,可以在整数末尾添加 n,或调用 BigInt() 函数:

例子 1

let x = 9999999999999999;
let y = 9999999999999999n;

Prova själv

例子 2

let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345);

Prova själv

BigInt:一种新的 JavaScript 数据类型

BigInt 的 JavaScript 类型是 "bigint

实例

let x = BigInt(999999999999999);
let type = typeof x;

Prova själv

BigInt 是 JavaScript 中的第二个数值数据类型(在 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;

Prova själv

Observera

Det är inte tillåtet att utföra aritmetiska operationer (typkonvertering förlorar information) mellan BigInt och Number.

BigInt kan inte utföra unsigned right shift-operation (>>>), eftersom det inte har en fast bredd.

BigInt decimaler

BigInt kan inte ha decimaler.

BigInt-divisions-exempel

let x = 5n;
let y = x / 2;
// Error: Kan inte blanda BigInt och andra typer, använd uttrycklig konvertering.
let x = 5n;
let y = Number(x) / 2;

Prova själv

BigInt-hexadecimalt, oktalt och binärt

BigInt kan också skrivas som hexadecimalt, oktalt eller binärt format:

BigInt-hexadecimalt-exempel

let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

Prova själv

Precision Curiosity

Rounding kan vara farligt för program säkerhet:

MAX_SAFE_INTEGER-exempel

9007199254740992 === 9007199254740993; // true !!!

Prova själv

Webbläsarstöd

Sedan september 2020 har alla webbläsare stöttat BigInt:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
2018 års maj 2020 års januari 2019 års juli 2020 års september 2018 års juni

Minsta och största säkra heltal

ES6 har lagt till max och min-egenskaper till Number-objektet:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

MAX_SAFE_INTEGER-exempel

let x = Number.MAX_SAFE_INTEGER;

Prova själv

MIN_SAFE_INTEGER-exempel

let x = Number.MIN_SAFE_INTEGER;

Prova själv

Nya numeriska metoder

ES6 har också lagt till två nya metoder för Number-objektet:

  • Number.isInteger()
  • Number.isSafeInteger()

Metoden Number.isInteger()

Om parametern är ett heltal, returnerar metoden Number.isInteger() sant.

isInteger()-exempel

Number.isInteger(10);
Number.isInteger(10.5);

Prova själv

Metoden Number.isSafeInteger()

Säkra heltal är heltal som kan representeras exakt som en dubbelprecisionstal.

Om parametern är ett säkert heltal, returnerar metoden Number.isSafeInteger() sant.

isSafeInteger()-exempel

Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);

Prova själv

Säkra heltal är heltal från -(253 - 1) till +(253 - 1) alla heltal.

Detta är en säker heltal: 9007199254740991. Detta är inte ett säkert heltal: 9007199254740992.