探究 JS 中 Infinity 的秘密

1,135 阅读1分钟

1 定义与性质

它表示无穷大数值[1]

它的性质:

  1. 它比机器能表示的最大值要大,具体是多少,不知道[2]
  2. 它分为两种,正无穷 Infinity+Infinity ,和负无穷 -Infinity;
  3. 它是全局属性,

我们可以通过下面代码来理解它的含义:

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

// 正无穷 和 负无穷 
Number.POSITIVE_INFINITY; // => Infinity
Number.NEGATIVE_INFINITY; // => -Infinity

window.Infinity; // => Infinity

在 JS 中,Number.MAX_VALUE 表示最大浮点数;Number.MAX_SAFE_INTEGER 是最大的整数;

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

2 应用

2.1 运算

与之运算,结果是无穷的情况。

Infinity + 1; // => Infinity
Infinity - 1000000000; // => Infinity
Infinity / 1000000000; // => Infinity
Infinity * 0.00000005; // => Infinity

与之运算,结果不是无穷的情况。

1 / Infinity; // => 0

某些运算,会出现无穷的情况。

1 / 0; // => Infinity
Math.log(0); // => -Infinity
Math.pow(10, 1000); // => Infinity ,超出了最大可表示数值

2.2 判断

在 JS 中,无穷与无穷等价。可通过函数 Number.isFinite 判断一个数值是否是有穷数。

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

Number.isFinite(Infinity); // => false
Number.isFinite(-Infinity); // => false
Number.isFinite(999); // => true

2.3 注意点

  1. 序列化时,Infinity 变成 null
JSON.stringify({ a: Infinity }); // => '{"a":null}'
  1. 解析数据时,'Infinity' 解析结果不一;
JSON.parse('{ "a": Infinity }'); // => error
JSON.parse('{ "a": "Infinity" }'); // => {a: 'Infinity'}

parseFloat('Infinity'); // => Infinity

parseInt("Infinity", 10); // => NaN
  1. 取到数组中最大值最小值时,空数组出现无穷数
Math.max(...[1, 2, 3]); // => 3
Math.max(...[]); // => -Infinity

Math.min(...[1, 2, 3]); // => 1
Math.min(...[]); // => Infinity

参考资料:

[1] Infinity

[2] 详解JavaScript 中的Infinity;