繁体   English   中英

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

[英]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之后”。 我不需要解决方法,我很想知道这里的问题。

我已经有一段时间没有使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM