2014-03-02 34 views

回答

2

我不认为parseIntparseFloat任何使用这里。可以简单地测试一个值是否是一个数字,filter out所有非数字值:

return Math.max.apply(Math, Array.prototype.filter.call(arguments, function(value) { 
    return typeof value === 'number'; 
})); 

arguments阵列状对象包含传递给函数的所有参数。但由于它不是一个真正的数组,我们必须使用Array.prototype.<method>.call来对其使用数组方法。

.apply通过传递一个数组作为第二个参数,可以调用具有未知数量参数的函数。


如果您想允许数字字符串,例如"123",你可以使用isNaN代替(和一些额外的警卫对null和空字符串):

return Math.max.apply(Math, Array.prototype.filter.call(arguments, function(value) { 
    return value != null && value !== "" && !isNaN(value); 
})); 

null""为什么额外的测试?因为Number("")Number(null)返回0,所以isNaN将返回false(但我们仍想要排除这些值)。

+0

很好的答案,但如果你解释它会更好。它让我读了比我想要的更多的读物。 – rvighne