为什么不带参数的 Math.max() 返回 -Infinity.md

450次阅读  |  发布于3年以前

Math.max() 是内置的 JavaScript 函数,从给定的一组数字中返回最大值。

其语法如下:

Math.max(value1[, value2, ...])

例如,让我们从 12 以及 3 中找到最大的数字:

Math.max(1, 2, 3); // => 3

正如预期的那样,函数的返回值为 3

当调用 Math.max() 时只使用一个数字参数时:

Math.max(1); // => 1

显然,一个数字的最大值是其本身。

但如果调用 Math.max() 时不传递任何参数,那会发生什么?

Math.max(); // => -Infinity

乍看之下上述代码的执行结果似乎有点出人意料,在没有参数的情况下调用 Math.max() 会返回 -Infinity。让我们来看看为什么会发生这种情况,以及为什么要发生这种情况。

一个数组的最大值

如果要确定一个数组的最大数字,可以在数组上使用扩展运算符:

const numbers1 = [1, 2, 3];

Math.max(...numbers1); // => 3

两个数组的最大值

现在,让我们尝试从给定两个数字数组中,确定每个数组的最大数,然后确定这两个最大值中的最大值。

const numbers1 = [1, 2, 3];
const numbers2 = [0, 6];

const max1 = Math.max(...numbers1);
const max2 = Math.max(...numbers2);

max1; // 3
max2; // 6
Math.max(max1, max2); // => 6

如果其中一个数组为空,如何尝试确定最大数组呢?

const numbers1 = [];
const numbers2 = [0, 6];

const max1 = Math.max(...numbers1);
const max2 = Math.max(...numbers2);

max1; // -Infinity
max2; // 6
Math.max(max1, max2); // => 6

从上述代码可以看出,Math.max(...[]) 与不带参数的 Math.max() 结果相同,均为 -Infinity

然后 Math.max(max1, max2)Math.max(-Infinity, 6),其结果为 6

尾声

现在就很清楚为什么在不带参数的情况下 Math.max() 返回 -Infinity 了,无论 numbers2 的最大值是多少,为了让空数组 numbers1(等同于不带参数的 Math.max())的最大值小于 numbers2 的最大值,numbers1 的最大值只能是负无穷,即 -Infinity

同理,Math.min() return Infinity

也因此:

Math.min() > Math.max(); // => true

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8