JavaScript 中的无穷数(Infinity)
2020/2/13 14:00:55
本文主要是介绍JavaScript 中的无穷数(Infinity),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
作者: Dmitri Pavlutin
译者:前端小智
来源:dmitripavlutin
点赞再看,养成习惯本文
GitHub
https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料。欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。
为了保证的可读性,本文采用意译而非直译。
Infinity
(无穷大)在 JS 中是一个特殊的数字,它的特性是:它比任何有限的数字都大,如果不知道 Infinity
, 我们在一些运算操作遇到时,就会觉得很有意思。
现在我们来看看 JS 中的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
2. Infinity
的特性
Infinity
比任何有限数都大。
举几个例子 Look Look:
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
等于相同符号的Infinity
:
Infinity === Infinity; // => true -Infinity === -Infinity; // => true
但前面的符号不一样就不相等,就也很好理解:
Infinity === -Infinity; // => false
JSt有一个特殊的函数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()
迭代中,最小值成为第一项。
5. Infinity 的的一些坑
我们很可能不会经常使用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
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
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()
确定提供的参数是否是一个有限的数字。
在涉及数字比较的算法时,可以使用Infinite
初始化变量,用例是寻找数组的最小值。
解析来自输入的数字时,必须小心Infinity
:Number('Infinity')
,parseFloat('Infinity')
返回实际的Infinity
。 当使用JSON.stringify()
序列化时,Infinity
变为null
。
原文:https://dmitripavlutin.com/in...
代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。
交流
文章每周持续更新,可以微信搜索「 大迁世界 」第一时间阅读和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 已经收录,整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,另外关注公众号,后台回复福利,即可看到福利,你懂的。
这篇关于JavaScript 中的无穷数(Infinity)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05HTML 颜色
- 2024-10-05HTML 颜色名
- 2024-10-01AntDesign-Form-rules学习:轻松入门教程
- 2024-10-01classnames学习:轻松掌握前端中的类名管理
- 2024-09-30前端案例资料:新手入门必读教程
- 2024-09-30前端编程资料:新手入门必备教程
- 2024-09-30前端培训资料:新手入门必读教程
- 2024-09-30滚动吸顶项目实战:从入门到上手
- 2024-09-29HTML学习:span标签教程详解
- 2024-09-29HTML基础:button标签教程