1. 程式人生 > 實用技巧 >Javascript中Math.max和Math.max.apply的區別和用法

Javascript中Math.max和Math.max.apply的區別和用法


最近在做一個小案例的時候遇到了Math.max.apply這麼一個用法,之前很少遇到過感覺挺有趣的,就記錄一下。

1Math.max

語法: Math.max(n1,n2,n3,...,nX)
返回值:max() 方法可返回指定的引數中帶有較大的值的那個數

var a = Math.max(1,2,3,4);
console.log(a); //4

但是如果資料是放在一個數組裡面,此時就不能這樣呼叫了。這時就用到apply方法

2Math.max.apply

apply() 方法呼叫一個函式。簡單理解為呼叫函式的方式,但是它可以改變函式的 this 指向,同時用指定陣列替換函式的引數

語法:fun.apply(thisArg, [argsArray])

  • thisArg:在fun函式執行時指定的 this 值 ,可以為null,就是不設定指向
  • argsArray:傳遞的值,必須包含在數組裡面

這裡額外補充一下,傳遞的值為陣列形式,但是數組裡是什麼型別引數,返回的也是什麼型別,比如輸入的陣列中是字串這裡取到的就是字串,是數值取到的就是數值。比如傳‘abc’ 返回的也是‘abc’。(補充說明)

返回值:apply() 方法的返回值就是函式的返回值,因為它就是呼叫函式

var arr = [1, 66, 3, 99, 4];
var max = Math.max.apply(Math, arr);
var min = Math.min.apply(Math, arr);
console.log(max);  //99
console.log(min);  //1

2.1Math.max.apply拓展案例

這裡我再舉一個應用案例———自動生成編號(自增)
說明:data為一個json陣列,裡面的每個物件都一個id值

let maxBookCode = ()=>{ 
	let arr = [];   
	//遍歷json陣列,把所有物件的id存到arr這個空陣列當中
    data.forEach((item)=>{   
    arr.push(item.id);  
    }); 
//最後返回裡面id值最大的那個數
return Math.max.apply(null,arr);
}

外部呼叫 maxBookCode() + 1 就能自動生成編號並且是自增的。