1. 首页
  2. 前端基础

关于JavaScript 中的无穷数(Infinity)

Infinity(无穷大)在 JS 中是一个特殊的数字,它的特性是:它比任何有限的数字都大,如果不知道 Infinity, 我们在一些运算操作遇到时,就会觉得很有意思。

现在我们来看看 JS 中的Infinity 属性,了解用例并解决一些常见的陷阱。

1.Infinity(无穷)的定义

无穷可以分为两种,正无穷和负无穷,JS 中对应的表示方式为:+Infinity(或者Infinity) 和 -Infinity

这意味着Infinity-Infinity(小于任何有限数的数字)都是number类型的特殊值:


typeof Infinity; // Js中文网 => 'number' typeof -Infinity; // Js中文网 => 'number'

Infinity 是全局对象的属性:


window.Infinity; // Js中文网 => Infinity

另外,Number函数也有两个属性来表示正负无穷大:


Number.POSITIVE_INFINITY; // Js中文网 => Infinity Number.NEGATIVE_INFINITY; // Js中文网 => -Infinity

2. Infinity 的特性

Infinity比任何有限数都大。

举几个例子 Look Look:


Infinity > 100; // Js中文网 => true Infinity > Number.MAX_SAFE_INTEGER; // Js中文网 => true Infinity > Number.MAX_VALUE; // Js中文网 => true

Infinity 在加法、乘法和除法等算术运算中用作操作数时会产生有趣的效果:


Infinity + 1; // Js中文网 => Infinity Infinity + Infinity; // Js中文网 => Infinity Infinity * 2; // Js中文网 => Infinity Infinity * Infinity; // Js中文网 => Infinity Infinity / 2; // Js中文网 => Infinity

一些Infinity 的运算得到有限的数:


10 / Infinity; // Js中文网 => 0

一个有限的数除以0得到 Infinity 结果:


2 / 0; // Js中文网 => Infinity

对无穷数进行概念上不正确的运算会得到NaN。 例如,不能除以无限数,也无法确定无限数是奇数还是偶数:


Infinity / Infinity; // Js中文网 => NaN Infinity % 2; // Js中文网 => NaN // JS中文网 - 前端进阶资源分享 [www.javascriptC.com](https://www.javascriptc.com/) // 一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容

2.1 负无穷

负无穷小于任何有限数

-Infinity 与一些有限数字进行比较:


-Infinity < 100; // Js中文网 => true -Infinity < -Number.MAX_SAFE_INTEGER; // Js中文网 => true -Infinity < -Number.MAX_VALUE; // Js中文网 => true

同时,负无穷小于正无穷:


-Infinity < Infinity; // Js中文网 => true

当使用不同操作符操作数时,也可能会得到负无穷:


Infinity * -1; // Js中文网 => -Infinity Infinity / -2; // Js中文网 => -Infinity -2 / 0; // Js中文网 => -Infinity

3.判断无穷

幸运的是,Infinity等于相同符号的Infinity


Infinity === Infinity; // Js中文网 => true -Infinity === -Infinity; // Js中文网 => true

但前面的符号不一样就不相等,就也很好理解:


Infinity === -Infinity; // Js中文网 => false

JSt有一个特殊的函数Number.isFinite(value),用于检查提供的值是否有限数:


Number.isFinite(Infinity); // Js中文网 => false Number.isFinite(-Infinity); // Js中文网 => false Number.isFinite(999); // Js中文网 => 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]); // Js中文网 => 1

min变量使用Infinity初始化。 在第一次for()迭代中,最小值成为第一项。

5. Infinity 的的一些坑

我们很可能不会经常使用Infinity值。 但是,值得知道何时会出现Infinity值。

5.1. 解析数据

假设 JS 使用一个输入(POST请求、输入字段的值等)来解析一个数字。在简单的情况下,它会工作得很好:


parseFloat('10.5'); // Js中文网 => 10.5 parseFloat('ZZZ'); // Js中文网 => NaN

这里需要小心的,parseFloat()'Infinity'字符串解析为实际的Infinity数:


parseFloat('Infinity'); // Js中文网 => Infinity

另一个是使用parseInt()来解析整数,它无法将'Infinity'识别为整数:


parseInt('10', 10); // Js中文网 => 10 parseInt('Infinity', 10); // Js中文网 => NaN

5.2 JSON 序列化

JSON.stringify()Infinity数字序列化为null


const worker = { salary: Infinity }; JSON.stringify(worker); // Js中文网 => '{ "salary": null }'

salary 属性值为Infinity但是当字符串化为JSON时,"salary"值将变为null

5.3 最大数溢出

Number.MAX_VALUE是 JS 中最大的浮点数。

为了使用甚至大于Number.MAX_VALUE的数字,JS 将该数字转换为Infinity


2 * Number.MAX_VALUE; // Js中文网 => Infinity Math.pow(10, 1000); // Js中文网 => Infinity

5.4 Math 函数

JS 中Math命名空间的某些函数可以返回Infinity:


const numbers = [1, 2]; const empty = []; Math.max(...numbers); // Js中文网 => 2 Math.max(...empty); // Js中文网 => -Infinity Math.min(...numbers); // Js中文网 => 1 Math.min(...empty); // Js中文网 => Infinity

在不带参数的情况下调用Math.max()时,返回-Infinity,而Math.min()则相应地返回Infinity。 如果尝试确定一个空数组的最大值或最小值,那结果后面人感到意外。

总结

JS中的Infinity表示无穷数的概念。 任何有限数均小于Infinity,而任何有限数均大于-Infinity

比较 JS 中的无穷值很容易:Infinity === Infinitytrue。特殊的函数Number.isFinite()确定提供的参数是否是一个有限的数字。

在涉及数字比较的算法时,可以使用Infinite初始化变量,用例是寻找数组的最小值。

解析来自输入的数字时,必须小心InfinityNumber('Infinity')parseFloat('Infinity')返回实际的Infinity。 当使用JSON.stringify()序列化时,Infinity变为null


原文:[https://dmitripavlutin.com/in…][2]


交流

干货系列文章汇总如下,觉得不错点个Star,欢迎 加群 互相学习。

作者: Dmitri Pavlutin
链接:https://dmitripavlutin.com/infinity-in-javascript/

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:关于JavaScript 中的无穷数(Infinity)

链接:https://www.javascriptc.com/3453.html

« JavaScript它如何运行:深入网络层 + 如何优化性能和安全
通俗易懂的红黑树图解(上)»

相关推荐

QR code