JavaScript BigInt

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

JavaScript 整数精度

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

整数精度

let x = 999999999999999;
let y = 9999999999999999;

Prøv det selv

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

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

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

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

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

如何创建 BigInt

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

例子 1

let x = 9999999999999999;
let y = 9999999999999999n;

Prøv det selv

例子 2

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

Prøv det selv

BigInt:一种新的 JavaScript 数据类型

BigInt 的 JavaScript 类型是 "bigint

实例

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

Prøv det selv

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;

Prøv det selv

Bemærk

Det er ikke tilladt at udføre aritmetiske operationer (typekonvertering vil miste information) mellem BigInt og Number.

BigInt kan ikke udføre unsigned right shift operation (>>>), fordi det ikke har en fast bredde.

BigInt decimaler

BigInt kan ikke have decimaler.

BigInt divisionseksempel

let x = 5n;
let y = x / 2;
// Fejl: Kan ikke blande BigInt og andre typer, brug eksplicit konvertering.
let x = 5n;
let y = Number(x) / 2;

Prøv det selv

BigInt seksteners, ottekers og binærestil

BigInt kan også skrives som seksteners, ottekers eller binærestil:

BigInt seksteners eksempel

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

Prøv det selv

Precision Curiosity

Rundering kan være farlig for program sikkerhed:

MAX_SAFE_INTEGER eksempel

9007199254740992 === 9007199254740993; // Er sandt!!!

Prøv det selv

Browserunderstøttelse

Siden september 2020 har alle browsere understøttet BigInt:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
Maj 2018 Januar 2020 Juli 2019 September 2020 Juni 2018

Mindste og største sikre heltal

ES6 har tilføjet max og min egenskaber til Number-objektet:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

MAX_SAFE_INTEGER eksempel

let x = Number.MAX_SAFE_INTEGER;

Prøv det selv

MIN_SAFE_INTEGER eksempel

let x = Number.MIN_SAFE_INTEGER;

Prøv det selv

Nye numeriske metoder

ES6 har tilføjet to nye metoder til Number-objektet:

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

Number.isInteger() metode

Hvis parameteren er et heltal, returnerer Number.isInteger() metoden true.

isInteger() eksempel

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

Prøv det selv

Number.isSafeInteger() metode

Sikre heltal er heltal, der kan præcist repræsenteres som en dobbeltpræcisionstal.

Hvis parameteren er en sikker heltal, returnerer Number.isSafeInteger() metoden true.

isSafeInteger() eksempel

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

Prøv det selv

Sikre heltal er heltal fra -(253 - 1) til +(253 - 1) alle heltal.

Dette er en sikker heltal: 9007199254740991. Dette er ikke et sikker heltal: 9007199254740992.