2011-04-21 102 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;