2014-10-28 54 views
-1

我目前正在瀏覽codeacademy.com上的javascript軌道。在for循環中引用對象屬性的表示法

當前的教訓讓我做到這一點,這將打印出每個屬性的值:

var nyc = { 
    fullName: "New York City", 
    mayor: "Bill de Blasio", 
    population: 8000000, 
    boroughs: 5 
}; 

// write a for-in loop to print the value of nyc's properties 
for(var p in nyc){ 
    console.log(nyc[p]); 
} 

一切都非常簡單。但我的問題是,爲什麼當我在for循環中使用點符號時這不起作用?像這樣:

for(var p in nyc){ 
    console.log(nyc.p); 
} 

不是打印出4個屬性值,而是將4個單詞'undefined'打印出來。 對我來說,我不應該能夠使用點符號訪問屬性,這似乎不合邏輯。如果這不是codeacademy課程的一些特點,那麼有人可以向我解釋這個嗎?

+0

爲什麼我要低調?是因爲這是重複的嗎? – Totem 2014-10-28 17:17:50

回答

2

因爲nyc.p相當於nyc["p"],推測該物體沒有p屬性。

a.b在JavaScript中相當於a["b"],它只是語法糖。通過變量名查找屬性的唯一方法是使用括號表示法,因爲點表示法總是引用常量硬編碼屬性名稱。

+0

你是說點表示法只能引用一個常量的對象屬性? – Totem 2014-10-28 02:07:16

+1

@圖騰我在答覆中說了很多,是的。 ;)它不能用來查找所有的屬性名稱。例如,你可以做'a [「*() - 」]',但顯然你不能做'a。*() - '。這只是一個簡短的符號,用於提前知道使用大多數字母數字名稱的屬性。如果您事先不知道屬性名稱(或者想要使用某種循環結構來查找例如數組中的屬性名稱,以避免代碼重複),或者屬性名稱也不是有效的JavaScript標識符,你需要使用括號語法。 – cdhowie 2014-10-28 02:09:38