2014-02-26 63 views
0

这是一直困扰我的东西。为什么JS forin循环将(循环)对象存储为(字符串化)键,而不是对象?

我相信例子讲好,让我们说我使用的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

这归结为“因为这是如何写的语言”。 – zzzzBov

+1

顺便说一句:记得在你做任何事之前检查sessionsManager.members.hasOwnProperty(session)。 –

回答

3

因为对象的键是字符串。

当您使用for..in,你基本上是说“在对象sessionsManager.members每个键session,做......”

这就是为什么sessionsManager.members[session].time作品 - 你把钥匙放回对象得到值。

+0

有没有什么办法让'session.time'产生正确的值(而不是'sessionsManager.members [session] .time')? – dvdchr

+1

本土,没有。这是遍历关联数组的迭代方式。然而,很多第三方库提供了您正在寻找的功能。查看jQuery.each或_.each –