我将此代码编写为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);
答案 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个元素。