2011-04-03 62 views
3

我无法理解JavaScript中的for/in语句。for /在语句中

book我用它解释它:

for(variable in object){ 
    statement 
} 

所以,举个例子:

var links = { 
    link1: {img: '/img/link1.jpg', w: 100 }, 
    link2: {img: '/img/link2.jpg', w: 140 } 
}; 

我怎么会打印出所有的链接?

如果我使用:

for(x in links){ 
    document.write(x); 
} 

它写出了2个属性名称(link1, link2),但我无法理解如何访问这些属性嵌套在更深层次,我首先想到的是一个嵌套循环for/in但我只是不明白语法。例如。在上面的代码中,x引用属性名称吗?如果不是x.img得到img属性?还是我的思维方式关闭?

我会很感激任何引用或链接的例子,我只是从书中找到2个代码示例并不能帮助我理解我想要的。

回答

5

x引用属性名称,但不引用属性值。因此,要访问属性值,您需要执行object[x]

因此,举例来说:

for (key in links) { 
    var linkProperties = links[key]; 

    document.write(key + ": \n"); 

    for (property in linkProperties) { 
     var propertyValue = linkProperties[property]; 
     document.write(" " + property + " = " + propertyValue + "\n"); 
    } 
} 

会给

link1: 
    img = /img/link1.jpg 
    w = 100 
link2: 
    img = /img/link2.jpg 
    w = 140 

另外值得一提的是:如答案讨论this question,一个hasOwnProperty后卫子句使用for ... in时,几乎总是需要的。

+1

感谢您的解释。 – Daniel 2011-04-03 03:43:59

-1
for(x in links){ 
    document.write(links[x]); 
} 
+0

这是不安全的,因为它会返回分配给'Array'原型的任何属性。 – WhyNotHugo 2012-08-14 05:49:59