parseInt()/ parseFloat()忽略非数字参数

时间:2014-03-02 02:05:16

标签: javascript

如何在以下函数中使用parseInt或parseFloat忽略非数字参数?

 function highestNumber(num1, num2, num3) {
      var highest = Math.max(num1, num2, num3);
      return highest;
 }

 alert(highestNumber(26,1,109));

1 个答案:

答案 0 :(得分: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(但我们仍希望排除这些值)。