为什么一个对象的属性值不能用作另一个对象的属性名?

时间:2011-04-21 23:06:09

标签: javascript

以下在我的JS控制台(firebug)中给出了一个错误:

var obj1 = {name:'king', val:20}, obj2, objName = obj1.name;
obj2 = {obj1.name:obj1.val};

但以下工作正常:

var obj1 = {name:'king', val:20}, obj2, objName = obj1.name;
obj2 = {objName:obj1.val};

确切的错误是:“缺少:属性ID之后”。我不需要解决方法,我很想知道这里有什么问题。

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

我有一段时间没有使用过JS,所以如果我错了就更正

如果您使用此:

obj = {name : value};

然后您正在创建一个名为name的新字段的新对象。

所以当你试图做

obj2 = {obj1.name : obj1.val};

您试图创建一个名为obj1.name的字段,该字段不是有效的标识符。

第二个

obj2 = {objName : obj1.val};

名称objName是有效的标识符,因此可行。但它没有使用变量objName,而是创建一个 new 作为obj2的字段

答案 2 :(得分:0)

我认为你对第二个人的工作原理感到困惑。

var obj1 = {name:'king', val:20}, obj2, objName = obj1.name;
obj2 = {objName:obj1.val};

obj2中的属性名称实际上并不是“王者”。它将是“objName” - 只是字符串“objName”而不是变量objName的值。

如果要动态分配属性名称,则非常简单。

var obj1 = {name:'king', val:20}, obj2;
obj2 = {};
obj2[obj1.name]=obj1.val;