如何在以下函数中使用parseInt或parseFloat忽略非数字参数?parseInt()/ parseFloat()忽略非数字参数
function highestNumber(num1, num2, num3) {
var highest = Math.max(num1, num2, num3);
return highest;
}
alert(highestNumber(26,1,109));
如何在以下函数中使用parseInt或parseFloat忽略非数字参数?parseInt()/ parseFloat()忽略非数字参数
function highestNumber(num1, num2, num3) {
var highest = Math.max(num1, num2, num3);
return highest;
}
alert(highestNumber(26,1,109));
我不认为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
(但我们仍想要排除这些值)。
很好的答案,但如果你解释它会更好。它让我读了比我想要的更多的读物。 – rvighne
因此,如果它不是一个数字类型,你想从Math.max()中排除它? – linstantnoodles