属性在for ... in循环中未定义,但我可以手动访问

时间:2018-12-03 19:20:35

标签: javascript object for-in-loop

我这样定义一个对象:

let users = {
  Alan: {
    age: 27,
    online: false
  },
  Jeff: {
    age: 32,
    online: true
  },
  Sarah: {
    age: 48,
    online: false
  },
  Ryan: {
    age: 19,
    online: true
  }
};

然后我仔细检查一下,然后取回名字,这就是我所期望的:

for (user in users) {
    console.log(user);
}

// Alan
// Jeff
// Sarah
// Ryan

然后我执行此操作,并且得到四次未定义

for (user in users) {
  console.log(user.age);
}
// undefined
// undefined
// undefined
// undefined

然后我执行此操作,然后可以访问age属性

users.Alan.age

这是怎么回事?

2 个答案:

答案 0 :(得分:0)

您需要引用对象中的值而不是键。您可以从用户对象中选择用户,然后从年龄中选择。

for (user in users) {
  console.log(users[user].age);
}

答案 1 :(得分:0)

使用户成为这样的数组会更加标准:

let users = [
  {
    name: 'Alan',
    age: 27,
    online: false
  },
  {
    name: 'Jeff',
    age: 32,
    online: true
  },
  {
    name: 'Sarah',
    age: 48,
    online: false
  },
  {
    name: 'Ryan',
    age: 19,
    online: true
  }
];

我认为这可能会“发挥”您所期望的方式。 (其中users对象的每个元素都是一个对象。)