[英]Why can't one object's property value be used as a property name in another object?
以下内容使我的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};
确切的错误是:“缺少:属性id之后”。 我不需要解决方法,我很想知道这里的问题。
对象文字中不允许在':'左边添加表达式。
请在这里看看: 为什么我的代码为什么在JavaScript中返回错误“ missing:after property id”? 在这里http://www.dyn-web.com/tutorials/obj_lit.php
我已经有一段时间没有使用JS了,如果我错了,请改正
如果使用此:
obj = {name : value};
那么您将使用名为name
的新字段创建一个新对象。
所以当你尝试做
obj2 = {obj1.name : obj1.val};
您试图创建一个名为obj1.name
的字段,该字段不是有效的标识符。
对于第二个
obj2 = {objName : obj1.val};
名称objName
是有效的标识符,因此可以使用。 但是它没有使用变量objName
,而是创建了一个新的变量作为obj2
的字段。
我认为您对第二个为什么起作用感到困惑。
var obj1 = {name:'king', val:20}, obj2, objName = obj1.name;
obj2 = {objName:obj1.val};
obj2
中的属性名称实际上不会是“ king”。 这将是“ objName”-只是字符串“ objName”,而不是变量objName
的值。
如果要动态分配属性名称,这很简单。
var obj1 = {name:'king', val:20}, obj2;
obj2 = {};
obj2[obj1.name]=obj1.val;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.