Javascript中Math.max和Math.max.apply的區別和用法
阿新 • • 發佈:2020-08-23
最近在做一個小案例的時候遇到了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 就能自動生成編號並且是自增的。