JavaScript-BigInt

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

JavaScript 整数精度

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

整数精度

let x = 999999999999999;
let y = 9999999999999999;

Versuchen Sie es selbst

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

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

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

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

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

如何创建 BigInt

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

例子 1

let x = 9999999999999999;
let y = 9999999999999999n;

Versuchen Sie es selbst

例子 2

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

Versuchen Sie es selbst

BigInt:一种新的 JavaScript 数据类型

BigInt 的 JavaScript 类型是 "bigint

实例

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

Versuchen Sie es selbst

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;

Versuchen Sie es selbst

Hinweis

Arithmetische Operationen (Typumwandlung verlieren Informationen) zwischen BigInt und Number sind nicht erlaubt.

BigInt kann keine unzeichenbezogene Rechtsverschiebung (>>>), da es keine festgelegte Breite hat.

BigInt-Brüche

BigInt kann keine Brüche haben.

BigInt-Divisionsbeispiel

let x = 5n;
let y = x / 2;
// Fehler: BigInt und andere Typen können nicht gemischt werden, verwenden Sie ausdrückliche Konvertierung.
let x = 5n;
let y = Number(x) / 2;

Versuchen Sie es selbst

BigInt in Hexadezimal-, Oktaal- und Binärdarstellung

BigInt kann auch in Hexadezimal-, Oktaal- oder Binärdarstellung geschrieben werden:

BigInt-Instanz im Hexadezimalformat

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

Versuchen Sie es selbst

Precision Curiosity

Rundungen könnten die Sicherheit des Programms gefährden:

MAX_SAFE_INTEGER-Instanz

9007199254740992 === 9007199254740993; // Wird wahr !!!

Versuchen Sie es selbst

Browser-Unterstützung

Seit September 2020 unterstützen alle Browser BigInt:

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

Kleinste und größte sichere Ganzzahlen

ES6 hat auch die max und min-Attribute dem Number-Objekt hinzugefügt:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

MAX_SAFE_INTEGER-Instanz

let x = Number.MAX_SAFE_INTEGER;

Versuchen Sie es selbst

MIN_SAFE_INTEGER-Instanz

let x = Number.MIN_SAFE_INTEGER;

Versuchen Sie es selbst

Neue numerische Methoden

ES6 hat zwei neue Methoden für das Number-Objekt hinzugefügt:

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

Methode Number.isInteger()

Wenn der Parameter ein Integer ist, gibt die Methode Number.isInteger() zurück true.

isInteger() Beispiel

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

Versuchen Sie es selbst

Methode Number.isSafeInteger()

Sichere Ganzzahlen sind Ganzzahlen, die genau als Double-Punktzahlen dargestellt werden können.

Wenn der Parameter eine sichere Ganzzahl ist, gibt die Methode Number.isSafeInteger() zurück true.

isSafeInteger() Beispiel

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

Versuchen Sie es selbst

Sichere Ganzzahlen sind von -(253 - 1) bis + (253 - 1) Alle Ganzzahlen.

Dies ist eine sichere Ganzzahl: 9007199254740991. Dies ist keine sichere Ganzzahl: 9007199254740992.