JavaScript BigInt

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

JavaScript 整数精度

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

整数精度

let x = 999999999999999;
let y = 9999999999999999;

Kokeile itse

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

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

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

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

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

如何创建 BigInt

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

例子 1

let x = 9999999999999999;
let y = 9999999999999999n;

Kokeile itse

例子 2

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

Kokeile itse

BigInt:一种新的 JavaScript 数据类型

BigInt 的 JavaScript 类型是 "bigint

实例

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

Kokeile itse

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;

Kokeile itse

Huomaa

Ei sallita aritmeettisia laskuja BigInt ja Number välillä (tyyppimuunnokset menettävät tiedon).

BigInt ei voi suorittaa unsigned right shift operaatiota (>>>), koska sillä ei ole vakiolaajuutta.

BigInt desimaalinen

BigInt ei voi olla desimaalinen.

BigInt jakolaskun esimerkki

let x = 5n;
let y = x / 2;
// Virhe: Ei voida sekoittaa BigInt ja muita tyyppien, käytä nimenomaista muunnosta.
let x = 5n;
let y = Number(x) / 2;

Kokeile itse

BigInt heksadesimaali, oktaali ja binääri

BigInt voidaan kirjoittaa myös heksadesimaalina, oktaalina tai binäärinä:

BigInt heksadesimaaliesimerkki

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

Kokeile itse

Tarkkuus uteliaisuus

Pyöristäminen voi vaarantaa ohjelman turvallisuuden:

MAX_SAFE_INTEGER esimerkki

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

Kokeile itse

Selaimen tuki

Kaikista selaimista on tullut tuettuja BigIntistä syyskuusta 2020 lähtien:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
Kesäkuu 2018 Tammikuu 2020 Heinäkuu 2019 Syyskuu 2020 Kesäkuu 2018

Minimi ja maksimi turvalliset kokonaisluvut

ES6 lisääsi Number-olion max ja min -ominaisuudet:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

MAX_SAFE_INTEGER esimerkki

let x = Number.MAX_SAFE_INTEGER;

Kokeile itse

MIN_SAFE_INTEGER esimerkki

let x = Number.MIN_SAFE_INTEGER;

Kokeile itse

Uudet luku-menetelmät

ES6 lisääsi Number-olion kahtia uusia menetelmiä:

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

Number.isInteger()-metodi

Jos parametri on kokonaisluku, Number.isInteger()-metodi palauttaa true.

isInteger() esimerkki

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

Kokeile itse

Number.isSafeInteger()-metodi

Turvalliset kokonaisluvut ovat kokonaislukuja, jotka voidaan tarkasti ilmaista dvaalikulmion luvuina.

Jos parametri on turvallinen kokonaisluku, Number.isSafeInteger()-metodi palauttaa true.

isSafeInteger() esimerkki

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

Kokeile itse

Turvalliset kokonaisluvut ovat -(253 - 1) + (253 - 1) kaikki kokonaisluvut.

Tämä on turvallinen kokonaisluku: 9007199254740991. Tämä ei ole turvallinen kokonaisluku: 9007199254740992.