Bigint 大整数

js/bigint2026-10-29 11:03:47

BigInt 类型 在 Javascript 中是一个数字的原始值,它可以表示任意大小的整数。使用 BigInt,你可以安全地存储和操作巨大的整数,甚至超过 Number 的安全整数限制(Number.MAX_SAFE_INTEGER)。

对 BigInt 的操作不是常数时间的。

创建 BigInt

可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数 BigInt()(但不包含 new 运算符)并传递一个整数值或字符串值。

const theBiggestInt = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n

const hugeString = BigInt("9007199254740991");
// ↪ 9007199254740991n

const hugeHex = BigInt("0x1fffffffffffff");
// ↪ 9007199254740991n

const hugeBin = BigInt(
  "0b11111111111111111111111111111111111111111111111111111",
);
// ↪ 9007199254740991n

BigInt 类型的算数与位运算

你可以使用大多数运算符处理 BigInt,包括 +、*、-、** 和 %。

除法和有符号右移操作 >> 会丢失小数部分。

BigInt 不支持单目 (+) 运算符。

除 >>>(无符号右移)之外的 位操作 也可以支持。因为 BigInt 都是有符号的, >>> (无符号右移)不能用于 BigInt。

JavaScript 中没有无符号左移运算符 (<<<)。

BigInt 类型与 Number 类型

BigInt 类型的变量表示的整数可以超过 Number.MAX_SAFE_INTEGER,而 Number 类型的变量不可以:

// BigInt
const x = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991n
x + 1n === x + 2n; // false,因为 9007199254740992n 和 9007199254740993n 不相等

// Number
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true,因为都等于 9007199254740992

BigInt 不能用于 Math 对象中的方法。

如果 BigInt 值在算术表达式中与常规 Number 值混合,或者它们相互隐式转换,则抛出 TypeError。

BigInt 值并不总是更精确的,也不总是比 Number 精确,因为 BigInt 不能表示小数,但可以更精确地表示大整数。这两种类型都不能相互替代。BigInt 变量在转换成 Number 变量时可能会丢失精度(整数部分)。Number 变量在转换成 BigInt 变量时可能会丢失精度(小数部分)。

BigInt 类型与 Number 类型的比较

BigInt 并不是严格等于有着相同数学值的 Number,而是宽松的相等(因为类型不同)。

0n === 0;
// ↪ false

0n == 0;
// ↪ true

Number 和 BigInt 可以进行比较。两者也可以混在一个数组内并排序。

1n < 2;
// ↪ true

2n > 1;
// ↪ true

const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
// ↪  [4n, 6, -12n, 10, 4, 0, 0n]

mixed.sort();
// ↪ [-12n, 0, 0n, 10, 4n, 4, 6]

BigInt 类型的条件运算

BigInt 在需要转换成 Boolean 的时表现跟 Number 类似。

if (0n) {
  console.log("Hello from the if!");
} else {
  console.log("Hello from the else!");
}

// ↪ "Hello from the else!"

0n || 12n;
// ↪ 12n

0n && 12n;
// ↪ 0n

Boolean(0n);
// ↪ false

Boolean(12n);
// ↪ true

!12n;
// ↪ false

!0n;
// ↪ true

参考

对象 BigInt
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/BigInt

JavaScript 数据类型和数据结构
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures

本页目录