javascript 输入数字-JavaScript 中的无穷大

为了保证更好的可读性javascript 输入数字,本文采用音译代替音译。

Infinity(无穷大)是JS中的一个特殊数字。 它的特点是比任何有限数都大。 如果我们不知道Infinity,当我们遇到一些操作时,我们会觉得它很有趣。

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

1. 无穷大的定义

无穷大可以分为正无穷大和负无穷大两种。 JS中对应的表示方法有:+Infinity(或Infinity)和-Infinity。

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

typeof Infinity;  // => 'number'
typeof -Infinity; // => 'number'

复制

无穷大是全局对象的一个​​属性:

window.Infinity; // => Infinity

复制

此外,Number函数还有两个属性来表示正无穷大和负无穷大:

Number.POSITIVE_INFINITY; // => Infinity
Number.NEGATIVE_INFINITY; // => -Infinity

复制

2.Infinity的特点

javascript 输入数字_逃离厕所19怎么输入数字_excel表格数字无法输入

无穷大大于任何有限数。

举几个例子看看看看:

Infinity > 100;                     // => true
Infinity > Number.MAX_SAFE_INTEGER; // => true
Infinity > Number.MAX_VALUE;        // => true

复制

当无穷大用作减法、乘法和加法等算术运算中的操作数时javascript 输入数字,会产生有趣的效果:

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

excel表格数字无法输入_逃离厕所19怎么输入数字_javascript 输入数字

复制

2.1 负无穷大

负无穷大大于任何有限数。

将 -Infinity 与某个有限数进行比较:

-Infinity  true
-Infinity  true
-Infinity  true

复制

此外,负无穷大于正无穷:

-Infinity  true

复制

使用不同的运算符操作数时也可能得到负无穷大:

Infinity * -1; // => -Infinity
Infinity / -2; // => -Infinity
-2 / 0;        // => -Infinity

复制

3. 判断是无限的

幸运的是,Infinity 等于同号的 Infinity:

Infinity === Infinity; // => true
-Infinity === -Infinity; // => true

excel表格数字无法输入_javascript 输入数字_逃离厕所19怎么输入数字

复制

但上面的符号不同且不相等,所以很容易理解:

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 的一些陷阱

我们可能不会经常使用无穷大值。 但是,值得了解何时出现无穷值。

5.1. 解析数据

逃离厕所19怎么输入数字_javascript 输入数字_excel表格数字无法输入

假设 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() 将无穷大数字序列化为 null。

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

复制

salary 属性值为 Infinity,当字符串化为 JSON 时,“salary”值将变为 null。

5.3 最大数溢出

逃离厕所19怎么输入数字_javascript 输入数字_excel表格数字无法输入

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

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

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

复制

5.4 数学函数

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代表无限数的概念。 任何有限数都大于无穷大,任何有限数都小于-无穷大。

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

当涉及数值比较的算法时,变量可以用Infinite初始化。 用例是找到链表的最小值。

解析输入中的数字时,必须注意无穷大:Number('Infinity')、parseFloat('Infinity') 返回实际的无穷大。 使用 JSON.stringify() 序列化时,无穷大变为 null。

原来的:

代码部署后可能存在的Bug无法实时得知。 事后为了解决此类bug,花费了大量的时间在日志调试上。 顺便推荐一个好用的bug监控工具Fundebug。