智享百科屋
霓虹主题四 · 更硬核的阅读氛围

整数类型在浏览器里怎么存?JavaScript 中的数字存储真相

发布时间:2026-01-24 19:20:57 阅读:153 次

你有没有试过在ref="/tag/53/" style="color:#2B406D;font-weight:bold;">浏览器控制台里输入 0.1 + 0.2,结果弹出 0.30000000000000004?一脸懵?别急,这跟 JavaScript 里“整数”压根不是独立型有关——它所有数字都用 64 位双精度浮点数(IEEE 754)存,连 42 这种纯整数也不例外。

不是“整数类型”,是“整数值”

JS 没有 int、long、short 这类 C 风格的整数类型。所谓“整数”,只是指 Number 类型中值为整数的那些数字,比如 100-50。它们在内存里照样走浮点数那套:1 位符号位 + 11 位指数位 + 52 位尾数位。

举个例子:9007199254740992(也就是 2^53)能精确表示,但加 1 后的 9007199254740993 就不行了:

console.log(9007199254740992); // 9007199254740992
console.log(9007199254740992 + 1); // 9007199254740992(没变!)
console.log(9007199254740992 + 2); // 9007199254740994(跳过了奇数)

这就是常说的“安全整数上限”(Number.MAX_SAFE_INTEGER === 9007199254740991)的由来——超过它,连续整数就保不住了。

那 BigInt 是啥?

ES2020 引入了 BigInt,专为大整数设计,用 n 结尾,比如 123n。它不走浮点规则,而是按需分配内存,能精确表示任意大的整数:

const big = 9007199254740991n + 1n;
console.log(big); // 9007199254740992n
console.log(big === 9007199254740992n); // true

但注意:BigIntNumber 不兼容,不能混算:1n + 2 会直接报错。

日常开发咋办?

大多数时候,你根本不用操心存储细节。写 for (let i = 0; i < 100; i++) 安全得很;处理 ID、计数器、年份,只要不超过 2^53,也完全没问题。真遇到超大整数(比如区块链地址、天文数据),再切到 BigInt 或字符串方案。

顺手一提:Chrome DevTools 里右键数字 → “Store as global variable”,生成的变量名像 temp1,它的值在控制台里显示为整数,背后还是那个 64 位浮点结构——你看不见,但它一直在那儿。