如何在以下函数中使用parseInt或parseFloat忽略非数字参数?
function highestNumber(num1, num2, num3) {
var highest = Math.max(num1, num2, num3);
return highest;
}
alert(highestNumber(26,1,109));
答案 0 :(得分:2)
我认为parseInt
或parseFloat
在这里没有任何用处。您只需测试一个值是否为数字,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
(但我们仍希望排除这些值)。