在JavaScript里,Number类型基于IEEE 754双精度浮点格式,只能精确表达 -(2^53 - 1) 到 2^53 - 1 之间的整数。当业务中出现更大的整数,比如分布式ID、加密运算结果时,普通数值类型会发生截断。BigInt作为语言原生新增的数据类型,能够表示任意大小的整数,从而让大整数运算不再依赖第三方库。

BigInt的创建方式
创建BigInt有两种常见写法。一种是在整数字面量后面直接加字母 n,另一种是使用内置的 BigInt() 函数进行转换。
// 字面量方式
const a = 123456789012345678901234567890n;
// 函数方式
const b = BigInt('987654321098765432109876543210');
console.log(a + b); // 1111111110111111111011111111100n
BigInt支持的基础运算
BigInt可以使用加、减、乘、除、取模等运算符,但不能与Number直接混合运算,否则会抛出类型错误。
- 加法运算:使用 + 符号
- 除法运算:结果会自动向下取整,没有小数部分
- 比较运算:BigInt与Number可以比较大小,不会报错
const x = 10n; const y = 3n; console.log(x + y); // 13n console.log(x - y); // 7n console.log(x * y); // 30n console.log(x / y); // 3n,不是3.333... console.log(x % y); // 1n console.log(10n === 10); // false,类型不同 console.log(10n == 10); // true,值相等 console.log(10n > 5); // true,可与Number比较
类型转换与注意事项
BigInt不能用于 Math 对象的方法,也不能和 Number 直接做加减。需要显式转换时,可用 Number() 把BigInt变回普通数字,但这可能丢失精度,只建议在确认数值安全时使用。
| 场景 | 处理方式 |
|---|---|
| BigInt转Number | Number(bigIntVal),大数会失真 |
| Number转BigInt | BigInt(numVal),小数会报错 |
| JSON序列化 | 默认不支持,需要自定义replacer |
JSON处理示例
const data = { id: 9007199254740993n };
const json = JSON.stringify(data, (key, value) =>
typeof value === 'bigint' ? value.toString() : value
);
console.log(json); // {"id":"9007199254740993"}
实际运算例子
下面演示用BigInt计算两个超大整数的乘积,验证其精度保持完整。
const big1 = 123456789012345678901234567890n; const big2 = 987654321098765432109876543210n; const product = big1 * big2; console.log(product); // 12193263113702179522618503244526978042196579645239274630n
小结
BigInt让JavaScript原生具备大整数运算能力。开发时记住它不能与Number隐式混算,且JSON原生不支持。在订单、加密、计数等需要精确大数的地方,合理使用BigInt可以有效避免精度隐患。
JavaScriptBigInt大整数运算修改时间:2026-07-30 21:36:19