BigInt 是 JavaScript 中用于安全处理任意精度整数的原始类型,解决 Number 类型因 IEEE 754 限制导致的大整数精度丢失问题;需用 n 后缀或 BigInt() 创建,不与 Number 混合运算,且存在 JSON 序列化、Math 方法兼容性等限制。

BigInt 是 JavaScript 中专门用于表示任意精度整数的原始类型,它能安全处理超出 Number.MAX_SAFE_INTEGER(即 9007199254740991)范围的大整数,避免精度丢失。
为什么不能直接用 Number 表示大整数
JavaScript 的 Number 类型基于 IEEE 754 双精度浮点数,只能精确表示 ≤ 2^53 - 1 的整数。超过该值后,连续整数无法被唯一表示:
console.log(9007199254740991 === 9007199254740992); // false console.log(9007199254740992 === 9007199254740993); // true ← 精度已丢失
这种隐式舍入对金融计算、密码学、大 ID 处理等场景是不可接受的。
如何创建和使用 BigInt
必须通过字面量后缀 n 或构造函数 BigInt() 创建;二者行为不同,需注意:
立即学习“Java免费学习笔记(深入)”;
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
-
123n是合法字面量;123.5n、1e5n语法错误 -
BigInt("123")可接受字符串(支持十进制、十六进制如"0xFF"),但不接受小数字符串(BigInt("12.5")报错) -
BigInt(123)仅接受安全整数,BigInt(9007199254740992)会因Number先丢失精度而得到错误结果 -
BigInt和Number不能混合运算(1n + 2报TypeError)
BigInt 的运算与兼容性限制
支持常规算术运算(+、-、*、**、%)、位运算(&、|、 等),但不支持 / 的小数结果(除法自动向下取整):
console.log(5n / 2n); // 2n ← 不是 2.5n
关键限制包括:
- 不能与
Math方法混用(Math.pow(2n, 3n)报错) - JSON 不支持序列化(
JSON.stringify({x: 123n})抛异常) - 比较时注意类型:
1n == 1返回true,但1n === 1为false(类型不同) - 旧版浏览器(如 IE、Safari ≤ 13.1)不支持,服务端需确认 Node.js ≥ 10.4.0(且 V8 ≥ 6.7)
真正要用好 BigInt,得时刻记住它和 Number 是隔离的类型系统——不是“升级版数字”,而是另一套整数语义;传参、序列化、跨环境交互时,类型边界比想象中更硬。









