JavaScript算术运算符按IEEE 754静默处理溢出:超上限→Infinity,下限→-Infinity或0(含-0);下溢归零;大整数超安全整数范围会丢失精度,需用BigInt;浮点误差非溢出,应避免直接比较。

JavaScript 的算术运算符本身不抛错也不拦截溢出,而是按 IEEE 754 规则静默返回特殊值:超出上限 → Infinity,低于下限 → -Infinity 或 0(含 -0)。这不是 bug,是语言设计决定的,但开发者必须主动识别和应对。
溢出时返回 Infinity 和 -Infinity
当数字超过 Number.MAX_VALUE(约 1.798e308)时,结果变为 Infinity;负数低于 Number.MIN_VALUE(约 -1.798e308)则为 -Infinity。
Number.MAX_VALUE * 2 === Infinity-Number.MAX_VALUE * 2 === -Infinity-
Infinity + 100、Infinity * 5仍为Infinity - 可用
isFinite(x)判断是否为普通有限数;!isFinite(x) && !isNaN(x)可区分 Infinity 类型
下溢时归零,包括负零
当结果绝对值小到低于 Number.MIN_VALUE(约 5e-324),JS 直接返回 0 或 -0:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
Number.MIN_VALUE / 10 === 0-Number.MIN_VALUE / 10 === -0-
-0 === 0返回true,但1 / -0 === -Infinity,而1 / 0 === Infinity - 一般业务中无需特别处理
-0,除非涉及除法或符号敏感计算
大整数运算易丢失精度,需用 BigInt
超过 Number.MAX_SAFE_INTEGER(9007199254740991)后,整数无法被唯一表示,加减可能“跳变”:
立即学习“Java免费学习笔记(深入)”;
-
9007199254740991 + 1 === 9007199254740992✅ -
9007199254740991 + 2 === 9007199254740992❌(丢失精度) - 整数超限时,应改用
BigInt:写成9007199254740991n + 2n,结果精确 - 注意:
BigInt不能与普通number混用,会报TypeError
浮点误差不是溢出,但常被混淆
像 0.1 + 0.2 !== 0.3 是 IEEE 754 表示局限导致的舍入误差,不属于溢出范畴,但影响判断逻辑:
- 避免直接用
===比较浮点结果 - 用差值法:
Math.abs(a - b) < Number.EPSILON - 金额等场景建议转为整数运算(如单位“分”)或使用专用库(如
decimal.js)

















