任意数求和?

184 阅读1分钟

1.有漏洞不完整的任意求和

 //任意数求和
    function sum(){
        var total=null;
        for(var i=0;i<arguments.length;i++){
           var num=arguments[i];
           //console.log(num); 1 2 'abc' NaN 10
           if(typeof num === 'number' && !isNaN(num)){
              total+=num;
              console.log(total);//1 3 13
           }
        }
        return total;
    }
    console.log(sum(1,2,'abc',NaN,10))

2.稍微修改了一些的任意数求和

//如果当前参数可以转换成数字 我就累加(允许纯数字字符串)
    function sum(){
        var total=null;
        for(var i=0;i<arguments.length;i++){
           //console.log(arguments);
           //console.log(arguments[i]);
           console.log('转换前1',arguments[i])

           //num变量用来存储 转换后的值
           var num=Number(arguments[i]);
           console.log('转换后2',num)//1 2 10 123

           if(!isNaN(num)){
              total+=num;
              console.log(total);// 1 3 13 136
           }
        }
        return total;
    }
    console.log(sum(1,2,10,'123','10px'));

3.比较完整,解决了很多漏洞的任意数求和

function sum(){
         var total=0;
         for(var i=0;i<arguments.length;i++){
            // var num = Number(arguments[i]) // '123'
            // var num = parseInt(arguments[i]) // '10px'
            var num=parseFloat(arguments[i])
            if(!isNaN(num)){
              total+=num;
              console.log(total);// 1 3 13 136 146.5  
            }
           
         }
         return total;
    }
    console.log(sum(1,2,10,'123','10.50px'))//146.5

!!! 重要:不能把var total=0放在for循环里面
 function sum(){
         for(var i=0;i<arguments.length;i++){
            var total=0; //如果total放在for循环里面的话,total的值每次都是0
            //console.log(arguments);
            var num=parseFloat(arguments[i])
            //console.log(num); 1 2 10 123 10.5
            if(!isNaN(num)){
              //console.log(total) 输出5次0 
              total+=num;
              console.log(total) //1 2 10 123 10.5
            }
           
         }
         return total;
    }
    console.log(sum(1,2,10,'123','10.50px'))