JavaScript中Number类型溢出时返回Infinity或-Infinity,下溢归零为0或-0,精度丢失发生在超过Number.MAX_SAFE_INTEGER时,可用isFinite、Number.isNaN及BigInt应对。
JavaScript 中 Number 类型发生数值溢出时,不会报错,而是返回特殊值 Infinity 或 -Infinity,这是 IEEE 754 标准定义的行为,属于静默处理。
当运算结果大于 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
当正数运算结果小于 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