We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
作者: Dmitri Pavlutin 译者:前端小智 来源:dmitripavlutin
为了保证的可读性,本文采用意译而非直译。
Infinity(无穷大)在 JS 中是一个特殊的数字,它的特性是:它比任何有限的数字都大,如果不知道 Infinity, 我们在一些运算操作遇到时,就会觉得很有意思。
Infinity
现在我们来看看 JS 中的Infinity 属性,了解用例并解决一些常见的陷阱。
无穷可以分为两种,正无穷和负无穷,JS 中对应的表示方式为:+Infinity(或者Infinity) 和 -Infinity。
+Infinity
-Infinity
这意味着Infinity和-Infinity(小于任何有限数的数字)都是number类型的特殊值:
number
typeof Infinity; // => 'number' typeof -Infinity; // => 'number'
Infinity 是全局对象的属性:
window.Infinity; // => Infinity
另外,Number函数也有两个属性来表示正负无穷大:
Number
Number.POSITIVE_INFINITY; // => Infinity Number.NEGATIVE_INFINITY; // => -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 结果:
0
2 / 0; // => Infinity
对无穷数进行概念上不正确的运算会得到NaN。 例如,不能除以无限数,也无法确定无限数是奇数还是偶数:
NaN
Infinity / Infinity; // => NaN Infinity % 2; // => NaN
负无穷小于任何有限数。
将-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
幸运的是,Infinity等于相同符号的Infinity:
Infinity === Infinity; // => true -Infinity === -Infinity; // => true
但前面的符号不一样就不相等,就也很好理解:
Infinity === -Infinity; // => false
JSt有一个特殊的函数Number.isFinite(value),用于检查提供的值是否有限数:
Number.isFinite(value)
Number.isFinite(Infinity); // => false Number.isFinite(-Infinity); // => false Number.isFinite(999); // => true
当我们需要初始化涉及数字比较的计算时,无穷值就非常方便。例如,在数组中搜索最小值时:
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()迭代中,最小值成为第一项。
min
for()
我们很可能不会经常使用Infinity值。 但是,值得知道何时会出现Infinity值。
假设 JS 使用一个输入(POST请求、输入字段的值等)来解析一个数字。在简单的情况下,它会工作得很好:
parseFloat('10.5'); // => 10.5 parseFloat('ZZZ'); // => NaN
这里需要小心的,parseFloat()将'Infinity'字符串解析为实际的Infinity数:
parseFloat()
'Infinity'
parseFloat('Infinity'); // => Infinity
另一个是使用parseInt()来解析整数,它无法将'Infinity'识别为整数:
parseInt()
parseInt('10', 10); // => 10 parseInt('Infinity', 10); // => NaN
JSON.stringify()将Infinity数字序列化为null。
JSON.stringify()
null
const worker = { salary: Infinity }; JSON.stringify(worker); // => '{ "salary": null }'
salary 属性值为Infinity但是当字符串化为JSON时,"salary"值将变为null。
salary
"salary"
Number.MAX_VALUE是 JS 中最大的浮点数。
Number.MAX_VALUE
为了使用甚至大于Number.MAX_VALUE的数字,JS 将该数字转换为Infinity:
2 * Number.MAX_VALUE; // => Infinity Math.pow(10, 1000); // => Infinity
JS 中Math命名空间的某些函数可以返回Infinity:
Math
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。 如果尝试确定一个空数组的最大值或最小值,那结果后面人感到意外。
Math.max()
Math.min()
JS中的Infinity表示无穷数的概念。 任何有限数均小于Infinity,而任何有限数均大于-Infinity。
比较 JS 中的无穷值很容易:Infinity === Infinity 为 true。特殊的函数Number.isFinite()确定提供的参数是否是一个有限的数字。
Infinity === Infinity
true
Number.isFinite()
在涉及数字比较的算法时,可以使用Infinite初始化变量,用例是寻找数组的最小值。
Infinite
解析来自输入的数字时,必须小心Infinity:Number('Infinity'),parseFloat('Infinity')返回实际的Infinity。 当使用JSON.stringify()序列化时,Infinity变为null。
Number('Infinity')
parseFloat('Infinity')
原文:https://dmitripavlutin.com/infinity-in-javascript/
代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。
干货系列文章汇总如下,觉得不错点个Star,欢迎 加群 互相学习。
https://github.com/qq449245884/xiaozhi
我是小智,公众号「大迁世界」作者,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!
关注公众号,后台回复福利,即可看到福利,你懂的。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
为了保证的可读性,本文采用意译而非直译。
Infinity
(无穷大)在 JS 中是一个特殊的数字,它的特性是:它比任何有限的数字都大,如果不知道Infinity
, 我们在一些运算操作遇到时,就会觉得很有意思。现在我们来看看 JS 中的
Infinity
属性,了解用例并解决一些常见的陷阱。1.Infinity(无穷)的定义
无穷可以分为两种,正无穷和负无穷,JS 中对应的表示方式为:
+Infinity
(或者Infinity
) 和-Infinity
。这意味着
Infinity
和-Infinity
(小于任何有限数的数字)都是number
类型的特殊值:Infinity
是全局对象的属性:另外,
Number
函数也有两个属性来表示正负无穷大:2.
Infinity
的特性Infinity
比任何有限数都大。举几个例子 Look Look:
Infinity 在加法、乘法和除法等算术运算中用作操作数时会产生有趣的效果:
一些
Infinity
的运算得到有限的数:一个有限的数除以
0
得到Infinity
结果:对无穷数进行概念上不正确的运算会得到
NaN
。 例如,不能除以无限数,也无法确定无限数是奇数还是偶数:2.1 负无穷
负无穷小于任何有限数。
将
-Infinity
与一些有限数字进行比较:同时,负无穷小于正无穷:
当使用不同操作符操作数时,也可能会得到负无穷:
3.判断无穷
幸运的是,
Infinity
等于相同符号的Infinity
:但前面的符号不一样就不相等,就也很好理解:
JSt有一个特殊的函数
Number.isFinite(value)
,用于检查提供的值是否有限数:4. 无穷的的使用情况
当我们需要初始化涉及数字比较的计算时,无穷值就非常方便。例如,在数组中搜索最小值时:
min
变量使用Infinity
初始化。 在第一次for()
迭代中,最小值成为第一项。5. Infinity 的的一些坑
我们很可能不会经常使用
Infinity
值。 但是,值得知道何时会出现Infinity
值。5.1. 解析数据
假设 JS 使用一个输入(POST请求、输入字段的值等)来解析一个数字。在简单的情况下,它会工作得很好:
这里需要小心的,
parseFloat()
将'Infinity'
字符串解析为实际的Infinity
数:另一个是使用
parseInt()
来解析整数,它无法将'Infinity'
识别为整数:5.2 JSON 序列化
JSON.stringify()
将Infinity
数字序列化为null
。salary
属性值为Infinity
但是当字符串化为JSON时,"salary"
值将变为null
。5.3 最大数溢出
Number.MAX_VALUE
是 JS 中最大的浮点数。为了使用甚至大于
Number.MAX_VALUE
的数字,JS 将该数字转换为Infinity
:5.4 Math 函数
JS 中
Math
命名空间的某些函数可以返回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/infinity-in-javascript/
代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。
交流
干货系列文章汇总如下,觉得不错点个Star,欢迎 加群 互相学习。
我是小智,公众号「大迁世界」作者,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!
关注公众号,后台回复福利,即可看到福利,你懂的。
The text was updated successfully, but these errors were encountered: