繁体   English   中英

JavaScript:获取未定义的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM