即使条件为真,为什么还要执行块?

时间:2016-01-15 19:24:16

标签: javascript object

几分钟前我在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,它显示联系信息。

怎么可能?我做错了什么?

2 个答案:

答案 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";
}

一旦找到与之匹配的联系人,您就无法找到。

在用完物品之前,你不应该放弃。