前端面试宝典

js写一个求和函数,达到下面的效果

// Should equal 15
sum(1, 2, 3, 4, 5);
// Should equal 0
sum(5, null, -5);
// Should equal 10
sum('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1, 'E', 1, 'F', 1, 'G', 1);
// Should equal 0.3, not 0.30000000000000004
sum(0.1, 0.2);

下面是我写的一个sum函数

function sum(...args){
	let total = 0;
	
	for(const arg of args){
	    let num = 0;
		// 根据不同类型处理参数
		if(typeof arg === 'number' && !isNaN(arg)){
			// 有效数字直接使用
		    num = arg;
		}else if(arg === null){
			num = 0; // num 视为0
		}else if(typeof arg === 'boolean'){
		    num = 0;// 布尔值为0
		}else if(typeof arg === 'string'){
			// 字符串尝试转换为数字
			const parsed = parseFloat(arg);
			num = isNaN(parsed) ? 0 : parsed;
		}else {
			// 其他类型视为0
			num = 0;
		}
		
		total += num;
	}
	
	// 处理浮点数精度问题,使用toFixed(10)后再转换为数字
	return parseFloat(total.toFixed(10));
}