猿问

检查多个输入是否为数字类型

假设我正在创建一个函数来将一些数字相加,我想验证它们实际上都是数字。


我正在这样做:


function addNumbers(x, y) {     

    if (typeof x == 'number' || typeof y == 'number') {

        // do something..

    }        

}

如果我有两个以上的数字,这似乎不切实际。检查多个数字的更好方法是什么?


HUWWW
浏览 192回答 3
3回答

临摹微笑

您可以将它们放在一个数组中并使用布尔标志来检查是否都是数字,使用Array.prototype.every(并检查NaNs,因为typeof NaN === 'number'):function addNumbers(...args) {  var all_numbers = args.every(a => typeof a == 'number' && !isNaN(a));  if (all_numbers) {    var sum = 0;    args.forEach(n => sum += n);    console.log(sum);  } else {    console.log('something is not right!');  }}addNumbers(5, 6);addNumbers(5, 6.2);addNumbers(5, 6, NaN);addNumbers(5, 6, []);addNumbers(5, 6, {});addNumbers(5, '6');addNumbers('5', 6);

Smart猫小萌

我认为它更易读的形式,使用Array.prototype.every,Number.isInteger和Array.prototype.reduce.我不确定你想对错误做什么,所以我们只是记录它们(和结果);// consider floating pointconst isNumber = n => typeof n == 'number' && !isNaN(n)const addNumbers = (...args) => {  const isValid = args.every(isNumber);  // const isValid = args.every(Number.isInteger);  if (!isValid) {    console.log('Error');    return;  }  const sum = args.reduce((sum, curr) => sum + curr, 0);  console.log(sum);  return sum;}addNumbers(5, 6);addNumbers(5, 6, NaN);addNumbers(5, '6');addNumbers('5', '6');addNumbers('5', 6);addNumbers(5.5, 6);addNumbers(5.5, 6, 6.4, 65);addNumbers(5.5, 6, {});

SMILET

您可以使用...rest 参数语法将输入作为数组使用,然后使用Array.prototype.reduce对它们求和,同时您可以使用+运算符将元素转换为数字并将它们相加:function addNumbers(...nums) {         return nums.reduce((sum, num) => sum + +num)}console.log(addNumbers(1, 2, "3", 4));或者如果你想跳过非数字(NaN如果你使用第一个代码片段会产生)只需在添加之前检查类型,如果数字你很好,否则用 a 替换它0:function addNumbers(...nums) {       return nums.reduce((sum, num) => sum + (!(typeof(num) === "number") ? 0 : +num));}console.log(addNumbers(1, 2, "3", 4, "non-number"));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答