2011-04-21 124 views
1

下面给我一个错误在我的JS控制台(萤火虫):为什么不能将一个对象的属性值用作另一个对象中的属性名称?

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}; 

确切的错误是:“丢失:物业编号后”。我不需要解决方法,我很想知道问题在这里。

+0

那些变量的声明刺痛了我的眼睛.... – 2011-04-21 23:08:35

回答

1

我没有用JS了一段时间,所以正确的,如果我错了

如果使用这样的:

obj = {name : value}; 

然后您将创建一个名为name的新字段。

所以,当你试图做

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

您试图创建一个名为obj1.name场,这不是一个有效的IDENTIFER。

对于第二个

obj2 = {objName : obj1.val}; 

名称是有效的标识符,所以此工程。但它没有使用可变,但正在创造一个新的一个作为一个字段obj2

0

我觉得你是搞不清楚为什么:第二个作品。

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

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

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

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