Math.max 和Math.min

原创 行云流水m 随笔 js‘’玩具‘’ 205阅读 2017-11-26 18:04:05 举报

今天看到了一篇文章,写了Math.max()和Math.min()在不填写参数的时候会分别返回-Infinity和Infinity,故而比较的时候Math.max()<Math.min(),那么从字面上理解,就会感觉很奇怪,为什么判断最大值返回的却是最小的数值,判断最小值则相反,于是想到了如果是自己写一个比较大小值的函数应该怎么写。
相信大家都知道Math.max()和Math.min()的作用,在JS中一个用于比较N个值得最大值,一个用于比较N各值得最小值,两个函数其实实现方法相同,如果是我的话我会这么写,例如判断多个数的最大值:
function max(arr){
var maxNum = -Infinity;//设定在JS中的最小值为默认的比较对象
arr.forEach(function(ele,index,self){
if(ele>max) max =ele;
})
return max;
}
当然,这只是一种简单的实现,没有考虑不传参数和参数不为数组的情况,只是作为一个实现原理,原版的Math.max函数肯定是经过处理的。不难发现,如果原版函数也是按照这个原理来进行的话,那么没有传入数组,返回值就会是默认的max,也就是-Infinity,相对的Math.min()肯定返回的就是Infinity。也就解释了为什么
Math.max()<Math.min()

评论 ( 2 )
最新评论
行云流水m 1F 2017-11-26 20:44:06 2F

对的,max方法总是会返回一个大于-Infinity的数,我这里主要是从函数实现的原理方面猜想了一下为什么在没有参数的情况下会返回-Infinity,同时加深一下Math.max()<Math.min()这个“奇怪”事实的记忆

卤卤卤 2017-11-26 20:25:15 1F

巧了,我也是刚看到这个,但是我想到的是媒体查询里的min和max,除了相等以外,符合min情况下的数值总是大于符合max情况下的数值。至于为什么Math.max()和Math.min()在不填写参数的时候会分别返回-Infinity和Infinity,我的理解是在有正确参数的情况下Math.max总是返回一个大于-Infinity的数,没有参数的情况下返回-Infinity(也可以认为此时的参数是-Infinity),Math.min同理。javascript 代码