几分钟前,我在 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”作为参数传递时,它返回条件“Contact not found”,而当我在同一搜索函数中将字符串“Bill”作为参数传递时,它显示联系信息。
这怎么可能?我做错了什么?
最佳答案
在您的代码中,在循环的第一次迭代中,prop
值与 Steve
不同。因此,if
条件失败,到达 else
部分并立即返回 contact not found
。
但是,只有当没有对象的 firstName
匹配时,你才应该返回 not found
消息,就像这样
function search(name) {
for (var prop in friends) {
if (friends[prop].firstName === name) {
return friends[prop];
}
}
return "contact not found";
};
关于javascript - 为什么即使条件为真也会执行 else block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34818314/