目录

JavaScript BigInt

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

JavaScript 整数精度

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

整数精度

let x = 999999999999999;
let y = 9999999999999999;
亲自试一试 »

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

在这个标准下,大整数无法精确表示,将会被四舍五入。

因此,JavaScript 只能安全地表示整数:

取决于9007199254740991+(253-1)

向下-9007199254740991-(253-1)。

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


如何创建 BigInt

创建一个BigInt,将 n 附加到整数或调用的末尾BigInt()

示例

let x = 9999999999999999;
let y = 9999999999999999n;
亲自试一试 »
let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345)
亲自试一试 »

BigInt:一种新的 JavaScript 数据类型

JavaScripttypeofABigInt是"bigint":

示例

let x = BigInt(999999999999999);
let type = typeof x;
亲自试一试 »

BigInt是 JavaScript 中的第二个数字数据类型(在Number)。

BigIntJavaScript 支持的数据类型总数为 8 种:

1. 字符串
2. 数量
3. 比格特
4. 布尔值
5. 未定义
6. 空
7. 符号
8. 对象


BigInt 运算符

可在 JavaScript 上使用的运算符Number也可以用在BigInt

BigInt 乘法示例

let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;
亲自试一试 »

笔记

之间的算术BigInt和一个Number不允许(类型转换丢失信息)。

无法在 a 上完成无符号右移 (>>>)BigInt(它没有固定的宽度)。


BigInt 小数

BigInt不能有小数。

BigInt Division 示例

let x = 5n;
let y = x / 2;
// Error: Cannot mix BigInt and other types, use explicit conversion.
let x = 5n;
let y = Number(x) / 2;
亲自试一试 »

BigInt 十六进制、八进制和二进制

BigInt也可以用十六进制、八进制或二进制表示法书写:

BigInt Hex 示例

let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;
亲自试一试 »

精准好奇心

舍入可能会损害程序安全性:

MAX_SAFE_INTEGER 示例

9007199254740992 === 9007199254740993; // is true !!!
亲自试一试 »

浏览器支持

BigInt自 2020 年 9 月起所有浏览器均支持:

Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
May 2018 Jan 2020 Jul 2019 Sep 2020 Jun 2018


最小和最大安全整数

ES6向 Number 对象添加 max 和 min 属性:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

MAX_SAFE_INTEGER 示例

let x = Number.MAX_SAFE_INTEGER;
亲自试一试 »

MIN_SAFE_INTEGER 示例

let x = Number.MIN_SAFE_INTEGER;
亲自试一试 »

新的数字方法

ES6还向 Number 对象添加了 2 个新方法:

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

Number.isInteger() 方法

这个Number.isInteger()方法返回true如果参数是整数。

示例:isInteger()

Number.isInteger(10);
Number.isInteger(10.5);
亲自试一试 »

Number.isSafeInteger() 方法

安全整数是可以精确表示为双精度数的整数。

这个Number.isSafeInteger()方法返回true如果参数是安全整数。

示例 isSafeInteger()

Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);
亲自试一试 »

安全整数是来自 -(253- 1) 至 +(253- 1).
这是安全的:9007199254740991。这是不安全的:9007199254740992。