为什么JS forin循环存储(循环)对象作为(字符串化)键,而不是对象?

时间:2014-02-26 19:38:16

标签: javascript

这是困扰我的事情。

我相信示例说得更好,所以假设我使用Javascript对象作为键值存储:

var sessionsManager = {
  'initialized': true,
  'members': {
    'apple' : { 'time': '3498134911123' },
    'orange': { 'time': '3031239123193' },
    'foo'   : { 'time': '3230102301929' },
    'bar'   : { 'time': '3230102301929' }
  }
};

for(var session in sessionsManager.members) {
  console.log(session.time); // #1: 'undefined'
  console.log(sessionsManager.members[session].time); // #2: correct values
}

注意最后两行console.log; session不是对象,而是字符串。为什么呢?

编辑:有没有办法让方法#1产生正确的值?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:3)

因为对象的键是字符串。

当您使用for..in时,您基本上会说“对象session中的每个键sessionsManager.members,请执行...”

这就是为什么sessionsManager.members[session].time有效 - 你把钥匙放回对象中以获得价值。