2010-08-03 19 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)");