2013年11月10日 星期日

JavaScript 物件使用 點號"." 和 中括號"[]" 存取屬性(property)的差別

JavaScript 物件的屬性,可以用 點號 "." 和 中括號 "[]" 來存取,
但兩種方式有一些差異。

用 點號 "." 存取時,點號右邊必須是一個識別字(identifier),例如屬性名稱,不能是字串、變數、運算式...等。
但用 中括號 "[]" 存取時,中括號裡面可以放字串、變數、運算式...等。
例如
var MyObj={
    "aa1":"test1",
    "aa2":"test2" 
};

// 使用點號
var x = MyObj.aa1; // test1

//使用中括號,可以帶變數進去運算
var y = MyObj["aa1"]; // test1
var tmp = "aa";
var z = MyObj[tmp + "2"]; // test2


所以用 for...in 迴圈列印出某物件的所有屬性時,可以使用 [] 來存取屬性。
這在將物件當成關聯式陣列使用時,還蠻有用的。
var MyObj={
    "name":"test1",
    "tel":"123456789",
    "addr":"test2"
};

for(p in MyObj) {
    console.log(MyObj[p]);
}

至於用 點號 "." 和 中括號 "[]" 來存取的效能,測了一下,似乎沒多大差異。
http://jsperf.com/property-access-dot-notation-vs-brackets

其他:
存取不存在的屬性時,JavaScript 不會報錯,而會回傳 undefined


參考:
http://stackoverflow.com/questions/4968406/javascript-property-access-dot-notation-vs-brackets

1 則留言: