2016-12-19 131 views
2

我有以下功能,其中Math.max()未按預期工作。它總是警告正在傳遞的參數的第一個值。錯誤在哪裏?Math.max()未按預期工作

function large(arr) { 
 
    alert(Math.max(arr)) 
 
} 
 

 
large(1,2,3,4,5);

+3

難道你看看[文件](https://developer.mozilla.org/en-US/docs/Web/JavaScript/參考/ Global_Objects /數學/最大)? –

+0

max不接受數組作爲輸入。所以Math.max(ArrayList)將返回NaN – Mahi

+0

你沒有傳遞數組;你傳遞了五個獨立的參數,並給第一個參數賦予名字「arr」。其他參數值只能通過'arguments'關鍵字訪問。 –

回答

6

您傳遞多個參數,但你的函數只使用第一個。

在ES5之前,你可以使用函數的apply方法和arguments object

function large() { 
 
    alert(Math.max.apply(Math, arguments)) 
 
} 
 

 
large(1,2,3,4,5);

在ES6可以使用restspread operator

function large(...arr) { 
 
    alert(Math.max(...arr)) 
 
} 
 

 
large(1,2,3,4,5);

+0

爲什麼要應用?? ... – Mahi

+0

@Mahi它允許你調用一個函數,它有一個參數數組(或類似數組的對象),長度未知。 –

+1

應該指定它是['Function.prototype.apply()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)在使用中,這裏。 – Walf

1

你可以這樣做。

如果你想使用arguments,你可以避免函數的參數。然後使用apply函數來調用Math.max

function large() { 
var _max = Math.max.apply(Math, arguments); 
alert(_max) 
}; 
large(1, 2, 3, 4, 5, 20,9000); 

DEMO