目的:使用Math.min和Math.max获取数组的最大值和最小值
Math.min和Math.max的用法:
Math.min和Math.max的原生用法
Math.min(3,5,76,34,2,9);
Math.max(3,5,76,34,2,9);
Math.min和Math.max里面只能放数据列表,不能放数组。
如果想要使用可以使用apply将数组中的元素一次传入max函数中,代码如下:
Math.min.apply(null,[3,5,76,34,2,9]);
Math.max.apply(null,[3,5,76,34,2,9]);
apply的用法分析:
①可以改变this的指向
举例:
var person = {
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
var person1 = {
firstName: "Bill",
lastName: "Gates",
}
person.fullName.apply(person1); // 将返回 "Bill Gates"
上面也就是将fullName函数中的this指向了person1,因此拿到的是person1对象中的fristName和lastName.
②传参
apply() 方法接受数组形式的参数。
var person = {
fullName: function(city, country) {
return this.firstName + " " + this.lastName + "," + city + "," + country;
}
}
var person1 = {
firstName:"John",
lastName: "Doe"
}
person.fullName.apply(person1, ["Oslo", "Norway"]);
上面的例子也就是将第二个参数["Oslo", "Norway"]数组中的每一个元素传给了fullName的形参city和country.
Math.min和Math.max的规则猜测
按照上面的例子可以猜测Math.min和Math.max的实现,如下:
var Math = {
min:function(){
//获取传入的所有参数 arguments
if(arguments.length == 0) return Infinity;
var min = arguments[0];
for(var i=1;i<arguments.length;i++){
if(arguments[i] < min){
min = arguments[i];
}
}
return min;
},
max:function(){
if(arguments.length == 0) return -Infinity;
var max = arguments[0];
for(var i=1;i<arguments.length;i++){
if(arguments[i] > max){
max = arguments[i];
}
}
return max;
}
}
apply可以将数组中的数一个一个传入到Math.min和Math.max中所以可以获取到最大值和最小值。
call也可以用来接收参数,但是不能接收数组,座椅不适用。