Math.max(param1,param2) 因為參數不支持數組。
所以可以根據apply的特點來解決,
var max = Math.max.apply(null,array),這樣就可以輕易的得到一個數組中最大的一項
注:在調用apply的時候第一個參數給了一個null,這個是因為沒有對象去調用這個方法,我們只需要用這個方法幫我們運算,得到返回的結果就行,所以就直接傳遞了一個null過去。
拓展:
1.call()與apply()
區分apply,call就一句話: foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments)==this.foo(arg1, arg2, arg3)
call, apply都屬於Function.prototype的一個方法,它是JavaScript引擎內在實現的,因為屬於Function.prototype,所以每個Function對象實例,也就是每個方法都有call, apply屬性.既然作為方法的屬性,那它們的使用就當然是針對方法的了.
這兩個方法是容易混淆的,因為它們的作用一樣,只是使用方式不同.
a.functionname.apply(b,arr);
a.functionname.call(b,arg1,arg2……);
call, apply方法區別是,從第二個參數起, call方法參數將依次傳遞給借用的方法作參數, 而apply直接將這些參數放到一個數組中再傳遞, 最后借用方法的參數列表是一樣的.
/* * apply方法: * 語法:apply(thisObj,[argArray]) * 定義:應用某一對象的一個方法,用另一個對象替換當前對象。 */ //定義一個人類 function Person(name,age){ this.name = name; this.age = age; } //定義一個學生類 function Student(name,age,grade){ Person.apply(this,arguments); //或者 Person.call(this,name,age) this.grade = grade; } var student = new Student("dqf","20","一年級"); console.info("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);
es6中Math對象的拓展:
1、Math.trunc()
該方法用於取出一個小數的小數部分,返回整數部分。
Math.trunc(1.234); //1 Math.trunc(-2.34141); //-2 Math.trunc(3.9); //3 //對於非數值,Math.trunc會內部使用Number將其轉為數值 Math.trunc("12.87656"); //12 //對於空值和無法截取整數的值,返回NaN Math.trunc("a"); //NaN Math.trunc(); //NaN Math.trunc(NaN); //NaN
2、Math.sign()
該方法用來判斷一個數到底是正數,負數,還是0。有五中返回值。
Math.sign(23.235); //1 Math.sign(25); //1 Math.sign(0); //0 Math.sign(0.0); //0 Math.sign(-0.0); //-0 Math.sign(-0); //-0 Math.sign(-2); //-1 Math.sign(-2.983958); //-1 Math.sign('a'); //NaN Math.sign(); //NaN Math.sign(NaN); //NaN
參數為正數時,返回1;
參數為0時,返回0;
參數為-0時,返回-0;
參數為負數時,返回-1;
參數為其他值時,返回NaN。
