2011-04-03 23 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