infinity 是 javascript 中表示正无穷大的合法数值,-infinity 表示负无穷大;应使用 isfinite 或 number.isfinite 判断,避免直接比较;常见来源为除零或数值溢出,参与运算需谨慎,json 序列化会转为 null。

JavaScript 中的 Infinity 是一个合法的数值,属于 Number 类型,表示正无穷大;对应还有 -Infinity 表示负无穷大。它不是错误,而是运算结果(如除零、超出安全范围等)的合理体现。正确识别、判断和处理 Infinity 是避免逻辑异常的关键。
判断值是否为 Infinity
不能用 === 或 == 直接比较(因为 Infinity === Infinity 虽为 true,但容易遗漏 -Infinity 或误判 NaN),推荐使用内置方法:
-
isFinite(value):返回true仅当value是有限数字(即非Infinity、-Infinity、NaN) -
Number.isFinite(value):更严格,不尝试类型转换(比如Number.isFinite('123')返回false) -
value === Infinity或value === -Infinity可用于明确区分正负无穷,但需分别判断
避免产生 Infinity 的常见场景
多数 Infinity 来源于意外计算,提前拦截比事后修复更稳妥:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 除法运算中分母为
0:如1 / 0→Infinity,-5 / 0→-Infinity;建议在除法前检查分母是否为0 - 数值过大溢出:如
Math.pow(10, 400)→Infinity;可用Number.MAX_VALUE(约1.79e+308)作上限参考 -
parseInt、parseFloat解析失败时返回NaN,但若对NaN做算术运算(如NaN * 2)仍得NaN,不会变成Infinity——这点常被混淆
安全地参与计算或转换
Infinity 可参与多数数学运算,但结果可能不符合预期,需谨慎:
-
Infinity + 1、Infinity * 2、Math.max(100, Infinity)都仍是Infinity -
Infinity - Infinity、Infinity / Infinity、0 * Infinity结果都是NaN(不是0或Infinity) - 转字符串没问题:
String(Infinity)→"Infinity";但转整数要小心:Math.floor(Infinity)→Infinity,parseInt(Infinity)→NaN - 若需“兜底”为普通数字,可结合
isFinite使用默认值:const safeNum = isFinite(val) ? val : 0;
与 JSON 和 API 交互时的注意事项
JSON.stringify() 会把 Infinity 和 NaN 序列化为 null,这可能导致数据丢失:
-
JSON.stringify({ x: Infinity })→{"x":null} - 后端收到
null可能误认为字段缺失或空值,而非无穷大 - 如需保留语义,应在序列化前手动处理,例如:
JSON.stringify(obj, (k, v) => !isFinite(v) ? String(v) : v)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










