for循环如何在Javascript中工作?代码运动

时间:2017-01-06 22:11:36

标签: javascript for-loop

这是我第二次通过codecademy中的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];
        }
      }
    };

    list(friends);
    search("Steve");

代码在控制台中生成以下结果:

bill
steve
{ firstName: 'Steve',
  lastName: 'Jobs',
  number: '(408) 555-5555',
  address: [ '1 Infinite Loop', 'Cupertino', 'CA', '95014' ] }
{"firstName":"Steve","lastName":"Jobs","number":"(408) 555-5555","address":["1 Infinite Loop","Cupertino","CA","95014"]}

for / in循环究竟是如何工作的?我知道这只是一个占位符,但为什么名单(朋友)只想出'账单'和'史蒂夫'?是不是应该遍历对象的所有属性?

2 个答案:

答案 0 :(得分:0)

它正在运行friends对象的所有属性。此对象只有2个属性billsteve,如下所示:

var friends = {};
    friends.bill = {
      ...
    };
    friends.steve = {
      ...
    };

这两个中的所有子属性都与初始for / in循环无关。 search函数会在找到firstName === 'steve'

的函数后打印出来

答案 1 :(得分:0)

我认为深入了解Object.defineProperty()所描述的here将清除您对propertykey& value

Object.defineProperty(obj, 'key', {
  enumerable: false,
  configurable: false,
  writable: false,
  value: 'static'
});