最近遇到这个函数,记录一下它的用法以及我对它的理解。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<h1>小白学习</h1>
<script>
var arr=[2,5,3,6,2,4,2,15,9,6,0,1];
alert(Math.min.apply(null,arr));//0//数组中最小值
alert(Math.max.apply(null,arr));//15//数组中最大值
alert(Math.min(2,5,3,6,2,4,2,15,9,6,0,1));//最小值
alert(Math.max(2,5,3,6,2,4,2,15,9,6,0,1));//最大值
</script>
</body>
</html>
功能:获取最大 / 最小值。
max和min差不多,我就拿max来分析吧!
1、Math.max()
Math.max(2,5,3,6,2,4,2,15,9,6,0,1)
这个函数比较好理解,就是找出其后参数中的最大值。Math.max()方法,支持传递多个参数,比如:Math.max(1,4,2,3,7,5,6)
但是它不支持直接传递一个数组作为参数。
解决方案一:等会介绍的 Math.max.apply()
解决方案二:换种思维,可用算法运算来比较得出数组最大值,如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<h1>小白学习</h1>
<script>
var arr=[2,5,3,6,2,4,2,15,9,6,0,1];
alert(getMax(arr));
function getMax(arr){
var arrLen=arr.length;
for(var i=0,ret=arr[0];i<arrLen;i++){
ret=Math.max(ret,arr[i]);
}
return ret;
}
</script>
</body>
</html>
2、Math.max.apply()
Math.max.apply(null,arr)
Function.apply()是JS的一个OOP特性,一般用来模拟继承和扩展this的用途,对于上面这段代码,可以这样去理解:
XXX.apply是一个调用函数的方法,其参数为:apply(Function, Args),
Function为要调用的方法,即作为函数内的this。Args是参数列表。当Function为null时,默认为上文,
可认为是
apply(Math.max, arr)
实际上等同于接收一个数组,并且是将数组中的每个值,分开来,传递给调用的方法。
在此处,使用apply的优点是在部分JS引擎中提升性能。