JavaScript:调用getAverageRating()为何返回undefined
问题定位
getAverageRating()返回undefined的核心原因是方法没有写返回值:
- 你在方法内只定义了
ratingsSum变量存储评分总和,既没有完成「总和除以评分数量得到平均值」的计算逻辑,也没有通过return把计算结果输出,JS中无返回值的函数默认返回undefined - 额外优化点:
Array.reduce()没有传入初始值时,如果_ratings是空数组(也就是还没添加任何评分就调用平均评分方法)会直接抛出运行错误,建议给累加器设置初始值0规避这个边界问题
修复方案
把Media类里的getAverageRating()方法替换为以下代码即可:
getAverageRating() { // 初始值设为0,兼容空评分列表的场景 const ratingsSum = this.ratings.reduce((accumulator, rating) => accumulator + rating, 0); // 计算平均值并返回结果 return ratingsSum / this.ratings.length; }
运行验证
修复后执行代码,控制台输出如下,符合预期:
true 4.666666666666667 true 2.3333333333333335
- 第一行
true是书籍《A Short History of Nearly Everything》的借出状态,调用切换借出状态方法后正确标记为已借出 - 第二行是该书的平均评分:3个评分4、5、5总和为14,除以3得到约4.67
- 第三行
true是电影《Speed》的借出状态,切换后正确标记为已借出 - 第四行是该电影的平均评分:3个评分1、1、5总和为7,除以3得到约2.33
内容的提问来源于stack exchange,提问作者Kuroo
相关产品推荐
相关产品推荐

