如何动态设置Javascript对象的值?


98

用语言很难解释这种情况,让我举个例子:

var myObj = {
    'name': 'Umut',
    'age' : 34
};

var prop = 'name';
var value = 'Onur';

myObj[name] = value; // This does not work

eval('myObj.' + name) = value;   //Bad coding ;)

如何在JavaScript对象中设置具有变量值的变量属性?



2
仔细看看。看来您只是忘了调整代码。应该是myObj[prop] = value;eval('myObj.'+name)也不起作用,因为该变量name不存在。
Felix Kling

7
您实际上应该使用更多的var键盘来声明变量,使用更多的分号,而不要使用eval并接受更多的答案。做完了
jAndy 2011年

您的问题有缺陷- 确实可以,但是您犯了一个错误。你写了“ myObj[name]”我敢肯定你的意思是写“ myObj[prop]”。
欧内斯特·弗里德曼·希尔

Answers:


151
myObj[prop] = value;

那应该工作。您混合了变量的名称及其值。但是用字符串索引对象以获取其属性可以在JavaScript中很好地工作。


47
myObj.name=value

要么

myObj['name']=value     (Quotes are required)

这两个都是可以互换的。

编辑:我猜你的意思是myObj[prop] = value,而不是myObj [name] = value。第二种语法工作正常:http : //jsfiddle.net/waitinforatrain/dNjvb/1/


1
如果对象属性是保留字,则需要第二种语法。
timw4mail 2011年

尽管这是正确的,但并不能真正回答他的问题。他想知道当属性名称在变量中时该怎么办。
欧内斯特·弗里德曼·希尔

更新的答案在那里,您name在应有的位置prop
bcoughlan 2011年

5

您可以使用与设置属性相同的方式来获取属性。

foo = {
 bar: "value"
}

您设置值 foo["bar"] = "baz";

获得价值 foo["bar"]

将返回“ baz”。


5

您还可以创建类似于值对象(vo)的内容;

SomeModelClassNameVO.js;

function SomeModelClassNameVO(name,id) {
    this.name = name;
    this.id = id;
}

比你能做的要多。

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);

3

当您创建对象时myObj,将其更像是字典。在这种情况下,它有两个键name,和age

您可以通过两种方式访问​​这些词典:

  • 就像一个数组(例如myObj[name]);要么
  • 就像财产(例如myObj.name);请注意,某些属性是保留的,因此首选第一种方法。

您应该可以毫无问题地将其作为属性来访问。但是,要将其作为数组访问,您需要将键像字符串一样对待。

myObj["name"]

否则,javascript将假定这name是一个变量,并且由于您尚未创建名为的变量name,因此它将无法访问您期望的键。


1
目前仍然之间的差异myObj[name]myObj.name虽然,因为前者是指变量名,第二到文本键值。
pimvdb 2011年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.