在學習 JavaScript 物件屬性遍歷時,經常會遇到這樣一段代碼:
var person = {fname: "John", lname: "Doe", age: 25};
var txt = "";
for (var x in person) {
txt = txt + person[x];
}
這裡 person[x] 可以正確讀取到屬性值,但如果改寫成 person.x,結果卻變成 undefinedundefinedundefined。這究竟是為什麼?
person[x]:x 是一個變量,循環時依次取值 "fname"、"lname"、"age",相當於動態訪問 person["fname"] 等,因此能正確拿到屬性值。person.x:JavaScript 會直接尋找名為 "x" 的字面屬性,而非變量 x 的值。物件裡並沒有叫 x 的屬性,所以返回 undefined,拼接三次後就變成 undefinedundefinedundefined。點語法只能用於已知的固定屬性名;需要動態屬性名時,必須用括號語法。這是 JavaScript 物件屬性訪問的基本規則,掌握它能避免許多低級錯誤。