Javascript 存取物件屬性的方式
2013年2月28日 星期四
在取動態物件時會需要用到
JavaScript 有兩種方式可以用來存取物件屬性,假設我們有以下這個物件:
var myObject = {
att1: '123',
att2: '456',
func1: function () {},
func2: function () {}
}
第一種存取的方法是用 JavaScript 的物件屬性存取子「句點 (.) 」:
myObject.attr1;
myObject.attr2;
myObject.func1();
myObject.func2();
第二種方法是利用關聯索引來存取:
myObject['attr1'];
myObject['attr2'];
myObject['func1']();
myObject['func2']();
為什麼要有第二種方法呢?這就是今天的主題了,如果今天我要動態存取物件屬性要怎麼做呢?
動態存取
找出myObject 物件裡的各項屬性,可以用以下的方法
for (var attrName in myObject) {
alert(attrName + ':' + 每個屬性的值);
}
這裡 attrName 會依序是 attr1, attr2, func1, func2 ,那麼我們怎麼抓到每個屬性的值呢?
那就是用第二種方法:
for (var attrName in myObject) {
alert(attrName + ':' + myObject[attrName]);
}
在這裡 attrName 會自動轉型成字串,用來當做關聯索引的值,也讓我們能夠存取到 myObject 物件裡對應的資訊。
那為什麼不能用第一種方法呢?
for (var attrName in myObject) {
alert(attrName + ':' + myObject.attrName); // myObject.attrName 可以嗎?
}
因為 JavaScript 規定在句點後面不能接上一個變數,所以如果我們用 myObject.attrName 的話,會被 JavaScript 解釋成要存取 myObject 的 attrName 屬性。
那可以用eval嗎?
for (var attrName in myObject) {
alert(attrName + ':' + eval('myObject.' + attrName));
}
儘可能別用eval,因為他會拖慢速度,所以還是用第二種方式就好啦。 Read more...