篮球得分计算函数返回else提示与undefined问题求助
问题:篮球得分计算函数返回错误提示与undefined的修复方案
我原本认为这段代码逻辑正确,功能是根据罚球(free throws)、两分球(2 pointers)、三分球(3 pointers)的数量计算篮球总得分。但调用totalBasketballScore(1, 2, 4)并通过console.log输出时,结果为'All Entries Must Be a Number'和undefined,请问需要修改哪里才能得到正确的得分?
原代码:
function totalBasketballScore(numberFreeThrows, numberMidRange, numberThreePointers) { const freeThrows = 1; const midRange = 2; const threePointers = 3; if (typeof numberFreeThrows === 'number' && numberMidRange === 'number' && numberThreePointers === 'number') { let totalFreeThrows = freeThrows * numberFreeThrows; let totalMidRange = midRange * numberMidRange; let totalThreePointers = threePointers * numberThreePointers; let gameTotal = totalFreeThrows + totalMidRange + totalThreePointers; return gameTotal; } else { console.log('All Entries Must Be a Number'); } } console.log(totalBasketballScore(1, 2, 4));
问题原因
类型判断逻辑错误:条件中仅对numberFreeThrows使用了typeof判断类型,而numberMidRange和numberThreePointers直接与字符串'number'做全等比较。由于传入的参数是数值类型,和字符串'number'全等判断结果为false,导致条件永远不成立,每次都会进入else分支:打印错误提示,且因为else分支没有返回值,函数默认返回undefined,最终console.log输出这两个结果。
修复方案
修正类型判断条件,为每个参数都添加typeof检查,同时可给else分支补充返回值避免undefined:
function totalBasketballScore(numberFreeThrows, numberMidRange, numberThreePointers) { const freeThrows = 1; const midRange = 2; const threePointers = 3; // 为所有参数添加typeof类型判断 if (typeof numberFreeThrows === 'number' && typeof numberMidRange === 'number' && typeof numberThreePointers === 'number') { const totalFreeThrows = freeThrows * numberFreeThrows; const totalMidRange = midRange * numberMidRange; const totalThreePointers = threePointers * numberThreePointers; const gameTotal = totalFreeThrows + totalMidRange + totalThreePointers; return gameTotal; } else { console.log('All Entries Must Be a Number'); // 可选:返回一个默认值,避免函数返回undefined return 0; } } console.log(totalBasketballScore(1, 2, 4)); // 输出17
修复后调用totalBasketballScore(1, 2, 4)会得到正确结果17(计算逻辑:11 + 22 + 4*3 = 1+4+12=17)。
内容的提问来源于stack exchange,提问作者HarrisWeinblatt
相关产品推荐
相关产品推荐

