JavaScript 无穷数 Infinity 详解:特性、运算与常见陷阱
本文深入解析 JavaScript 中的 Infinity(无穷大)与 -Infinity。涵盖其定义、算术运算特性、判断方法,并重点剖析解析数据、JSON 序列化及最大数溢出等常见陷阱,帮助开发者正确处理边界数值。
为确保阅读体验,本文采用意译方式呈现核心内容。
在 JavaScript 中,Infinity(无穷大)是一个特殊的数值类型。其核心特征是大于任何有限数字。理解这一概念,有助于我们正确解读某些运算结果。
接下来将介绍 JS 中 Infinity 属性的具体用法,并通过实例解析常见的使用误区。
Infinity(无穷)的定义
1. Infinity(无穷)的定义
无穷数分为正无穷和负无穷两类。在 JS 中,分别用 +Infinity(或简写为 Infinity)和 -Infinity 表示。
这表明 Infinity 和 -Infinity 均属于 number 类型的特殊值。
typeof Infinity; // => 'number'
typeof -Infinity; // => 'number'
Infinity 是全局对象的属性:
window.Infinity; // => Infinity
此外,Number 构造函数也提供了两个属性来分别表示正负无穷大:
Number.POSITIVE_INFINITY; // => Infinity Number.NEGATIVE_INFINITY; // => -Infinity
Infinity 的特性
2. Infinity 的特性
Infinity 的值大于任何有限的数字。
通过以下示例验证:
Infinity > 100; // => true Infinity > Number.MAX_SAFE_INTEGER; // => true Infinity > Number.MAX_VALUE; // => true
当 Infinity 作为操作数参与加法、乘法或除法等算术运算时,会产生特定的结果:
Infinity + 1; // => Infinity Infinity + Infinity; // => Infinity
Infinity * 2; // => Infinity Infinity * Infinity; // => Infinity
Infinity / 2; // => Infinity
部分涉及 Infinity 的运算会返回有限数值:
10 / Infinity; // => 0
有限数字除以 0 会得到 Infinity 结果:
2 / 0; // => Infinity
对无穷数执行逻辑上不成立的运算,结果将是 NaN。例如,无法将无限数除以自身,也无法判断其奇偶性:
Infinity / Infinity; // => NaN Infinity % 2; // => NaN
负无穷
2.1 负无穷
负无穷小于任何有限数字。
将 -Infinity 与有限数字进行比较:
-Infinity < 100; // => true -Infinity < -Number.MAX_SAFE_INTEGER; // => true -Infinity < -Number.MAX_VALUE; // => true
同时,负无穷小于正无穷:
-Infinity < Infinity; // => true
使用不同的操作符处理操作数时,也可能得到负无穷:
Infinity * -1; // => -Infinity Infinity / -2; // => -Infinity -2 / 0; // => -Infinity
判断无穷
3.判断无穷
幸运的是,相同符号的 Infinity 相互比较会返回 true:
Infinity === Infinity; // => true -Infinity === -Infinity; // => true
符号不同时则不相等,这符合直观理解:
Infinity === -Infinity; // => false
JS 提供了一个特殊函数 Number.isFinite(value),用于检查给定值是否为有限数:
Number.isFinite(Infinity); // => false Number.isFinite(-Infinity); // => false Number.isFinite(999); // => true
无穷的使用情况
4. 无穷的使用情况 在涉及数值比较的算法中,无穷值非常有用。例如,在数组中寻找最小值时:
function findMin(array) { let min = Infinity; for (const item of array) { min = Math.min(min, item); } return min; }
findMin([5, 2, 1, 4]); // => 1
min 变量初始化为 Infinity。在第一次 for 循环迭代中,最小值被更新为数组的第一项。
Infinity 的一些坑
5. Infinity 的一些坑
虽然日常开发中不常直接使用 Infinity 值,但了解其出现场景至关重要。
解析数据
5.1. 解析数据
假设 JS 解析来自输入(如 POST 请求、输入字段值等)的数字。在简单情况下,它能正常工作:
parseFloat('10.5'); // => 10.5
parseFloat('ZZZ'); // => NaN
这里需要特别注意,parseFloat() 会将字符串 'Infinity' 解析为实际的 Infinity 数值:
parseFloat('Infinity'); // => Infinity
另一个例子是使用 parseInt() 解析整数,它无法将 'Infinity' 识别为有效整数:
parseInt('10', 10); // => 10
parseInt('Infinity', 10); // => NaN
JSON 序列化
5.2 JSON 序列化
JSON.stringify() 会将 Infinity 数字序列化为 null。
const worker = { salary: Infinity };
JSON.stringify(worker); // => '{ "salary": null }'
虽然 salary 属性值为 Infinity,但在转换为 JSON 字符串时,"salary" 的值变为 null。
最大数溢出
5.3 最大数溢出
Number.MAX_VALUE 是 JS 中最大的浮点数。
为了表示大于 Number.MAX_VALUE 的数字,JS 会将其转换为 Infinity:
2 * Number.MAX_VALUE; // => Infinity Math.pow(10, 1000); // => Infinity
Math 函数
5.4 Math 函数
JS 中 Math 命名空间下的某些函数会返回 Infinity:
const numbers = [1, 2];
const empty = [];
Math.max(...numbers); // => 2
Math.max(...empty); // => -Infinity
Math.min(...numbers); // => 1
Math.min(...empty); // => Infinity
在不带参数的情况下调用 Math.max() 时,返回 -Infinity;而 Math.min() 则返回 Infinity。如果尝试确定一个空数组的最大值或最小值,结果可能会出乎意料。
总结
JS 中的 Infinity 表示无穷数的概念。任何有限数均小于 Infinity,而任何有限数均大于 -Infinity。
比较 JS 中的无穷值很简单:Infinity === Infinity 为 true。使用特殊函数 Number.isFinite() 可确定参数是否为有限数字。
在涉及数值比较的算法中,可以使用 Infinity 初始化变量,典型用例是寻找数组的最小值。
解析来自输入的数字时需小心:Number('Infinity') 和 parseFloat('Infinity') 会返回实际的 Infinity。当使用 JSON.stringify() 序列化时,Infinity 会变为 null。
原文:https://dmitripavlutin.com/infinity-in-javascript/
JS动态构建复杂嵌套JSON对象的方法
2026-11-05 15:41:52
JS负数取余为什么是负数?详解余数与模运算区别
2026-11-05 13:34:41
JS 解压出现乱码或报错怎么解决?
2026-11-05 12:32:38
JS 中 startsWith、indexOf 与正则判断字符串前缀的对比
2026-11-04 22:19:43
JS解析Excel后怎么将数据转换为JSON格式
2026-11-04 20:58:28
