Math.max()是JS中的一个内置方法,可以返回传入参数中最大的一个。例如:Math.max(1,2,3);//=>3如果Math.max()只接受一个参数,结果是什么?Math.max(1);//=>1如预期那样,一个数字的最大值就是它自己。但是不带参数调用Math.max()的结果呢?Math.max();//=>-Infinity不带参数的Math.max()返回的结果是-Infinity,然后,我们看看为什么会这样。1.数组中的最大值在讨论这个问题之前,我们先来看看Math.max()是如何获取数组中的最大值的。Math.max(num1,num2,...,numN)接受多个数字参数并返回其中的最大数量。如果我们想从数组中获取最大值,我们可以使用展开运算符:constnumbers1=[1,2,3];Math.max(...numbers1);//=>32。现在两个数组的最大值为,我们来看看有趣的事情。给定两个数组,我们首先确定每个数组中的最大值,然后从这两个最大值中确定最大值。constnumbers1=[1,2,3];constnumbers2=[0,6];constmax1=Math.max(...numbers1);constmax2=Math.max(...numbers2);max1;//3max2;//6Math.max(max1,max2);//=>6数组[1,2,3]的最大值为3,数组[0,6]的最大值为6,最后3和6是6。没有错误,让我们继续。如果数组为空,结果会是什么?让我们试试看:constnumbers1=[];constnumbers2=[0,6];constmax1=Math.max(...numbers1);constmax2=Math.max(...numbers2);max1;//-Infinitymax2;//6Math.max(max1,max2);//=>6现在,当第一个数组为空时,上面的最大值也是6。这里比较有意思的是Math.max(...numbers1)的返回值,这和numbers1数组为空时不带参数调用Math.max()是一样的,结果是-Infinity。所以Math.max(max1,max2)等价于Math.max(-Infinity,6),结果为6。现在你知道为什么Math.max()在不带参数调用时返回-Infinity了:这是一种定义方式空集合上的max函数。这个和加法类似,max的-Infinity和加法的0一样。Math.min()也有相同的行为——当不带参数调用时它返回Infinity。关于对实数的最大运算,-Infinity称为恒等元。这篇文章到此为止。这里有一个挑战:你能写一个和Math.max()完全一样的sum(num1,num2,...,numN)函数吗,它的功能是求所有元素的和,什么是Identity元素,如果你懂了欢迎留言补充知识点。作者:DmitriPavlutin译者:前端小智来源:DmitriPavlutin原文:https://dmitripavlun.com/javscript-math-max-infinity/代码关注。转载本文请联系大千世界公众号。
