为了保证的可读性,本文采用意译而非直译。
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; // => InfinityInfinity * 2; // => Infinity
Infinity * Infinity; // => InfinityInfinity / 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/infinity-in-javascript/
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]