以下在我的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之后”。我不需要解决方法,我很想知道这里有什么问题。
答案 0 :(得分:5)
对象文字内部不允许使用“:”表达式。
请在这里查看:Why does my code return the error "missing : after property id" in JavaScript?和http://www.dyn-web.com/tutorials/obj_lit.php
答案 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;