javascript 中的数字类型并不都是浮点数,它统一使用 ieee 754 标准的 64 位双精度浮点数(number)来表示所有数值,包括整数。这意味着在 javascript 中,整数和浮点数共享同一个数据类型,整数只是小数部分为 0 的浮点数。这种设计简化了语言规范,但在处理超大整数时可能会遇到精度丢失的问题。

如何判断一个 Number 是整数还是浮点数
要判断一个 Number 是否为整数,可以使用 Number.isInteger() 方法。该方法会检查传入的值是否为数字类型且其值等于其取整后的值。如果值为 NaN、非数字类型或带有小数部分的数字,则返回 false。

console.log(Number.isInteger(3)); // true
console.log(Number.isInteger(3.14)); // false
console.log(Number.isInteger(NaN)); // false
console.log(Number.isInteger('3')); // false
为什么大整数会出现精度问题
由于 JavaScript 使用 64 位浮点数表示所有数字,其中 53 位用于存储尾数,因此能精确表示的最大安全整数是 9007199254740991(即 Number.MAX_SAFE_INTEGER)。超过这个范围的整数在进行运算或比较时,可能会因为二进制表示的限制而出现精度丢失。

console.log(9007199254740991 + 1); // 9007199254740992 console.log(9007199254740992 + 1); // 9007199254740992 (精度丢失)
如何处理超出安全范围的整数
当需要处理超出 Number.MAX_SAFE_INTEGER 的大整数时,可以使用 ES2020 引入的 BigInt 类型。BigInt 可以表示任意精度的整数,通过在后缀添加 n 或在调用 BigInt() 构造函数时创建。需要注意的是,BigInt 不能与普通的 Number 直接混合运算,必须进行类型转换。
const bigInt = 9007199254740991n; console.log(bigInt + 1n); // 9007199254740992n console.log(typeof bigInt); // 'bigint'
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











