Codeacademy - 列出所有人 - 返回undefined

时间:2016-08-27 10:55:57

标签: javascript

我将此代码编写为CodeAcademy javascript课程的一部分。代码创建了两个对象'bob'和'mary',并将它们分配给'contacts'数组。

'list'函数遍历'contacts'数组并使用'printPerson'函数返回firstName + lastName

以下是运行代码后得到的结果:

  

Bob Jones

     

未定义 - >无法弄清楚为什么未定义?

     玛丽约翰逊

     

未定义

     

2 - > contacts.length - 不应该读1?

var bob = {
firstName: "Bob",
lastName: "Jones",
phoneNumber: "(650) 777-7777",
email: "bob.jones@example.com"
};

var mary = {
firstName: "Mary",
lastName: "Johnson",
phoneNumber: "(650) 888-8888",
email: "mary.johnson@example.com"
};

var contacts = [bob, mary];

function printPerson(person) {
console.log(person.firstName + " " + person.lastName);
}
var list = function() {
var contactLength = contacts.length
for (i = 0; i < contactLength; i++) {
    console.log(printPerson(contacts[i]));
    }
}
list();
console.log(contacts.length);

2 个答案:

答案 0 :(得分:1)

它在控制台中显示未定义,因为函数printPerson没有返回值(这意味着它返回undefined)。

您可以将函数更改为返回值而不是记录:

function printPerson(person) {
  return person.firstName + " " + person.lastName;
}

contacts.length按预期记录2 - 您的数组中有两个对象。

答案 1 :(得分:1)

在您的循环中,您正在调用console.log(printPerson(contacts[i]));

JavaScript首先忽略console.log()部分,然后开始评估内部部分printPerson(contacts[i])。 它是一个函数调用,因此JS调用函数,该函数记录&#34; Bob Jones&#34;到控制台。然后,由于函数没有return任何东西,函数调用被评估为undefined

接下来,JS返回被忽略的部分,插入已计算的表达式并运行命令:console.log("undefined")

要避免这种情况,您可以在函数中return person.firstName + " " + person.lastName;而不是记录它,或者只是在循环中调用printPerson(contacts[i]);

数组的长度为2,因为它包含2个元素。