2010-08-03 17 views
3

我真的不明白爲什麼這是行不通的:關聯數組/對象 - 用點號獲取值

thing = { 
img78:{ exifmanufacturer:"Canon", exifmodel:"Canon EOS 450D", exifexposuretime:"1/125", exiffstop:"71/10", exifiso:"200"}, 
img79:{ exifmanufacturer:"Canon", exifmodel:"Canon EOS 550D", exifexposuretime:"1/125", exiffstop:"71/10", exifiso:"100"}, 
img80:{ exifmanufacturer:"Canon", exifmodel:"Canon EOS 550D", exifexposuretime:"1/30", exiffstop:"16/1", exifiso:"250"}, 
img81:{ exifmanufacturer:"NIKON CORPORATION", exifmodel:"NIKON D700", exifexposuretime:"10/600", exiffstop:"71/10", exifiso:"800"}, 
img82:{ exifmanufacturer:"NIKON CORPORATION", exifmodel:"NIKON D700", exifexposuretime:"10/2500", exiffstop:"90/10", exifiso:"800"}, 
img83:{ exifmanufacturer:"NIKON CORPORATION", exifmodel:"NIKON D700", exifexposuretime:"10/600", exiffstop:"71/10", exifiso:"800"}, 
img77:{ exifmanufacturer:"Canon", exifmodel:"Canon EOS 450D", exifexposuretime:"1/160", exiffstop:"8/1", exifiso:"100"}, 
img69:{ exifmanufacturer:"NIKON CORPORATION", exifmodel:"NIKON D700", exifexposuretime:"10/600", exiffstop:"71/10", exifiso:"800"} 
}; 

var imageid = 'img80'; 

console.log('myVar1: ', thing.img80.exifmodel); 
console.log('myVar2: ', thing.imageid.exifmodel); 

輸出:

myVar1: Canon EOS 550D 
thing.imageid is undefined 

我本來以爲這將是另一邊。

回答

6

您需要訪問它略有不同使用[]符號,像這樣:

console.log('myVar2: ', thing[imageid].exifmodel); 

在JavaScript中,這些是相同的:

obj.Property 
obj["Property"] 

或在您的情況:

var prop = "Property"; 
obj[prop]; 
+0

也許介於'[imageid] .exifmodel'之間? – 2010-08-03 19:57:22

+0

@quixoto - Woops,趕上,謝謝,並更新:) – 2010-08-03 19:57:53

+0

啊......'事[imageid] .exifmodel'我一直在嘗試與方括號和點的各種組合,但不是那一個。謝謝! – xgarb 2010-08-03 20:10:24

0

在第二個例子中,它就像寫作thing.'img80'.exifmodel這是非法的。如果你想使用一個字符串來訪問一個對象的字段,你必須做的事[imageid] .exifmodel。

0

當你有一個這樣的字符串索引,則必須使用括號符號來訪問值:

var imageid = 'img80'; 
console.log('myVar2: ', thing[imageid].exifmodel); 

或者你總是可以採取的eval(或惡,取決於如何糟糕,你考慮這種做法)路線:

eval("console.log('myVar2: '), thing." + imageid + ".exifmodel)");