bigint专为精确表示任意大小整数设计,避免number类型在超过2⁵³−1时的精度丢失;需用字面量(如123n)或bigint()函数创建,不支持new bigint()、小数、json序列化及math方法,且不能与number混算。

JavaScript 的 BigInt 类型专为精确表示和运算任意大小的整数而设计,它能避免 Number 类型在超过 2⁵³ - 1 时丢失精度的问题。但使用时需注意语法、运算规则和兼容性限制。
创建 BigInt 的正确方式
BigInt 不能通过 new BigInt() 构造,必须用字面量(末尾加 n)或 BigInt() 函数转换:
- 字面量:
123n、0n、-456n - 函数转换:
BigInt("9007199254740991999")(只接受字符串或安全整数,传普通数字可能已失真) - ⚠️ 错误写法:
BigInt(123.45)会报错;BigInt(123)虽合法但无必要,且若原数字已超出安全整数范围,转换前就已精度丢失
支持的算术运算符
BigInt 支持常见整数运算,但不能与普通 Number 混合运算(会直接报错):
- 加减乘除取余:
100n + 200n、500n - 1n、10n * 20n、100n / 3n(结果向下取整)、100n % 7n - 幂运算:
2n ** 100n(支持大指数) - 位运算:
12n & 5n、10n 、<code>~7n等(按二进制补码处理) - 比较运算:
100n > 99n、0n === 0n(注意:0n == 0为true,但0n === 0为false)
混合运算必须显式转换
想让 BigInt 和 Number 一起算,必须手动转成同一类型:
- 转成
BigInt:123n + BigInt(456)或123n + BigInt("456") - 转成
Number:仅当值在-(2⁵³-1)到2⁵³-1范围内才安全,例如Number(100n) + 5 - ⚠️ 直接写
100n + 5会抛出TypeError
实用注意事项
BigInt 很有用,但也有边界限制:
- 不支持小数:
1.5n语法错误;BigInt(1.5)报错 - JSON 不支持:
JSON.stringify({x: 100n})会失败,需自行序列化(如转字符串) - Math 方法不适用:没有
Math.pow(10n, 2),改用10n ** 2n - 浏览器兼容性:现代浏览器(Chrome 67+、Firefox 68+、Safari 14+)支持,Node.js 10.4+ 支持;旧环境需 polyfill 或降级处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











