几分钟前我在Codeacademy上练习了一些JavaScript,我发现了一些令人困惑的东西。这是代码:
var friends = {};
friends.bill = {
firstName: "Bill",
lastName: "Gates",
number: "(206) 555-5555",
address: ['One Microsoft Way','Redmond','WA','98052']
};
friends.steve = {
firstName: "Steve",
lastName: "Jobs",
number: "(408) 555-5555",
address: ['1 Infinite Loop','Cupertino','CA','95014']
};
var list = function(obj) {
for(var prop in obj) {
console.log(prop);
}
};
var search = function(name) {
for(var prop in friends) {
if(friends[prop].firstName === name) {
console.log(friends[prop]);
return friends[prop];
}
else {
return "contact not found";
}
}
};
list(friends);
search("Steve");
问题在于,当我传递字符串" Steve"作为搜索功能中的arg,它返回条件"未找到联系人"当我通过字符串"比尔"作为同一搜索功能中的arg,它显示联系信息。
怎么可能?我做错了什么?
答案 0 :(得分:6)
在您的代码中,在循环的第一次迭代中,prop
值是除Steve
之外的其他值。因此,if
条件失败,到达else
部分并立即返回contact not found
。
但是,只有当所有对象的not found
都没有匹配时,您才应该返回firstName
条消息
function search(name) {
for (var prop in friends) {
if (friends[prop].firstName === name) {
return friends[prop];
}
}
return "contact not found";
};
答案 1 :(得分:4)
else {
return "contact not found";
}
一旦找到与之匹配的联系人,您就无法找到。
在用完物品之前,你不应该放弃。