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

Ahm*_*gdy 5 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");
Run Code Online (Sandbox Code Playgroud)

问题是,当我在搜索功能中将字符串"Steve"作为arg传递时,它返回条件"未找到联系人",而当我在同一搜索功能中将字符串"Bill"作为arg传递时,它显示联系信息.

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

the*_*eye 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";
};
Run Code Online (Sandbox Code Playgroud)