如何防止Math.max()返回NaN?

时间:2015-04-07 07:10:31

标签: javascript

我想创建一个从数组中返回最大数字的函数,但它会一直返回NaN

如何阻止NaN并返回想要的结果?

var thenum = [5,3,678,213];

function max(num){
    console.log(Math.max(num));
}

max(thenum);                                                                      

4 个答案:

答案 0 :(得分:4)

发生这种情况的原因是Math.max计算其参数的最大值。并且看作第一个参数是一个数组,它返回NaN。

您现在有 2个选项(取决于您的环境或偏好):

ES6(带扩展语法)

您可以将数组扩展到函数的参数。

const thenum = [5, 3, 678, 213];

console.log(Math.max(...thenum));

更多关于the spread syntax

here是这个例子的jsFiddle。


ES5(没有扩展语法)

或者,您可以使用apply方法调用它,该方法允许您调用函数并在数组中发送它们的参数。

你想要的是应用Math.max函数,如下所示:

var thenum = [5, 3, 678, 213];

function max(num){
    return Math.max.apply(null, num);
}

console.log(max(thenum));

您也可以将其作为方法并将其附加到Array原型。这样您就可以更轻松,更清洁地使用它。像这样:

Array.prototype.max = function () {
    return Math.max.apply(null, this);
};
console.log([5, 3, 678, 213].max());

更多关于the apply method

而且here是两个

的jsFiddle

答案 1 :(得分:1)

试试这个。 Math.max.apply(Math,thenum)

var thenum = [5,3,678,213];

function max(num){
    console.log(Math.max.apply(Math,thenum));
}
  

结果:678

答案 2 :(得分:1)

Math.max()方法不允许您传入数组。因此对于Array,您必须使用Function.prototype.apply(),例如

Math.max.apply(null, Array);

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

答案 3 :(得分:0)

var p = [35,2,65,7,8,9,12,121,33,99];

Array.prototype.max = function() {
  return Math.max.apply(null, this);
};

Array.prototype.min = function() {
  return Math.min.apply(null, this);
};


alert("Max value is: "+p.max()+"\nMin value is: "+ p.min());  
  

<强> demo