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'))
复制代码