使用字符串变量的值作为Javascript中现有对象的'索引'
问题描述:
我正在使用Javascript。使用字符串变量的值作为Javascript中现有对象的'索引'
我
var myobj = {
"one": {
"name" : "paul",
"no" : "A123"
},
"two": {
"name" : "mike",
"no" : "B456"
},
"three": {
"name" : "andy",
"no" : "C789"
},
};
我还有一个目标newitem
,我想插入
var newIndex = "four";
var newItem = {
"name" : "leo",
"no" : "D987"
};
如何插入newItem
到使用newIndex
为 '索引' myobj
?
顺便说一句,newIndex
不是由我生成的,所以我不能随便说myobj.four = newItem;
myobj.newIndex = newItem
不起作用,因为它使用单词“newIndex”为指标,而不是它的价值。
任何见解?
答
使用括号符号属性访问:
myobj[newIndex] = newItem;
当你要定义其名称不是一个有效的标识符的属性,例如它也是有用的:
obj["1foo"] = "bar"; // `obj.1for` will cause a SyntaxError
obj["a b"] = "bar"; // `obj.a b` will cause a SyntaxError
注意,你可以甚至使用此属性访问器的表达式,例如:
obj[someFunc()] = "foo";
它会评估e括号中的表达式,它会将结果转换为字符串,因为JavaScript没有true散列表,属性名称必须是String类型。
更多信息:
注意,在其上基于JavaScript标准的最新版本,它没有必要用括号符号指由关键字命名或保留的属性时词语:ECMAScript第5版允许使用'obj.for ='me''。 (一些其他的上下文,比如对象文字中的属性名称,也被放宽以允许使用关键字。)如果你想使用它,这个改变已经在Firefox中实现了几年。 – 2010-07-20 08:09:54
@Jeff,是的,忘了提及它,在ES5中'IdentifierName'可以与'.'属性访问器一起使用。我会做一个更好的例子... – CMS 2010-07-20 14:31:23