最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript 中 Number 类型中数值溢出时的表现行为
时间:2026-07-09 11:41:03 编辑:袖梨 来源:一聚教程网
JavaScript中Number类型溢出时返回Infinity或-Infinity,下溢归零为0或-0,精度丢失发生在超过Number.MAX_SAFE_INTEGER时,可用isFinite、Number.isNaN及BigInt应对。
JavaScript 中 Number 类型发生数值溢出时,不会报错,而是返回特殊值 Infinity 或 -Infinity,这是 IEEE 754 标准定义的行为,属于静默处理。
溢出(Overflow):超出最大可表示值
当运算结果大于 Number.MAX_VALUE(约 1.7976931348623157e+308)时,结果变为 Infinity;若为负向溢出(小于 -Number.MAX_VALUE),则为 -Infinity。
-
Number.MAX_VALUE * 2→Infinity -
-Number.MAX_VALUE * 2→-Infinity -
1 / 0→Infinity;-1 / 0→-Infinity - 任何非零有限数与
Infinity进行常规算术运算(如加、减、乘、除),结果仍为Infinity(符号依规则保留) -
Infinity / Infinity、Infinity - Infinity等未定义运算 →NaN
下溢(Underflow):趋近于零但低于最小正数
当正数运算结果小于 Number.MIN_VALUE(约 5e-324)时,JS 将其“归零”,返回 0;负数下溢则返回 -0。
-
Number.MIN_VALUE / 2→0 -
-Number.MIN_VALUE / 2→-0 -
0和-0在===下相等,但在除法中表现不同:1 / 0 === Infinity,而1 / -0 === -Infinity
安全整数边界:精度丢失而非溢出
注意区分“溢出”和“精度丢失”。JS 的 最大安全整数 是 Number.MAX_SAFE_INTEGER(2^53 - 1 = 9007199254740991)。超过此范围的整数仍能存储,但无法保证精确表示:
立即学习“Java免费学习笔记(深入)”;
-
9007199254740991 + 1→9007199254740992(正确) -
9007199254740991 + 2→9007199254740992(丢失精度,+2 变成 +1) - 这种现象不是
Infinity,而是浮点表示局限导致的隐式舍入
如何检测和应对
可用内置函数主动识别极端值:
-
isFinite(x):仅当x是普通数字(非NaN、非±Infinity)时返回true -
isNaN(x):判断是否为NaN(注意isNaN("abc")会先转数字,推荐用Number.isNaN(x)更严格) - 对大整数运算,应避免直接使用
Number,改用BigInt(需字面量加n后缀)或第三方库如big.js
相关文章
- 蚂蚁庄园今日答案(每日更新)2026年1月16日 07-17
- 蚂蚁庄园今日正确答案1月16日 07-17
- 死亡搁浅2全部34个武器的解锁方法条件是什么 07-17
- 星塔旅人全部角色特殊回忆触发条件方式合集 07-17
- Palia帕利亚1.12至1.18村民需求物品清单大全 07-17
- 舒舒服服小岛时光全部魔法种子分布详情图 07-17