[英]JavaScript: Getting undefined value
我编写了一个函数,该函数接受一个对象数组( students3
),并打印出学生的姓名及其平均考试成绩。
var students3 = [ { name : "Anthony", id : 0, grades : [{ id : 0, score : 84},{ id : 1, score : 20},{ id : 2, score : 80}] }, { name : "Winnie", id : 1, grades : [{ id : 0, score : 62},{ id : 1, score : 56},{ id : 2, score : 100}] }, { name : "Pawandeep", id : 2, grades : [{ id : 0, score : 79},{ id : 1, score : 92},{ id : 2, score : 49}] } ];
我的解决方案:
function getAverageScore(student) { var sum = 0; var grades = student.grades; for(var i = 0; i < grades.length; i++) { var grade = grades[i]; sum += grade.score; } var avg = sum/grades.length; return avg; } function printAverageGrade(students) { for(var i = 0; i < students.length; i++) { var student = students[i]; var averageScore = getAverageScore(student); console.log(student.name, averageScore); } }
运行console.log(printAverageGrade(students3));
之后的预期结果 是:
安东尼61.333333333333336
小熊72.66666666666666
Pawandeep 73.33333333333333
我的结果:
安东尼61.333333333333336
小熊72.66666666666666
Pawandeep 73.33333333333333
未定义
任何人都可以告诉我为什么我的结果中得到未定义的值? 谢谢。
printAverageGrade
函数本身将消息记录到控制台。 它没有return
语句,因此返回undefined
。
如果将printAverageGrade(students3)
到控制台,则将记录undefined
。
解决方案:不要记录printAverageGrade(students3)
:
console.log(printAverageGrade(students3))
→ printAverageGrade(students3)
最后一行是函数的返回值。 如果查看getAverageScore(student)
函数,可以看到您return avg;
,这就是赋予该值的原因。
printAverageGrades
不返回任何内容,因此其返回值是undefined
。 尽管控制台日志记录有效,但是只要您不尝试使用它来设置任何变量,此代码就可以了。
如果您是从浏览器的JavaScript控制台运行的,是否确定没有看到printAverageGrade
的返回值? 看这个简单的例子:
> function foo() { console.log("hello"); }
<- undefined
> foo()
hello
<- undefined
这两个undefined
是从控制台尝试打印立即命令的返回值的,如果我们尝试这样做,则为:
> function foo() { console.log("hello"); return "defined"; }
<- undefined
> foo()
hello
<- "defined"
具体来说,您的示例代码使用:
console.log(printAverageGrade(students3));
由于printAverageGrade()
返回任何内容,因此控制台记录undefined
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.