【问题标题】:Why can't one object's property value be used as a property name in another object?为什么一个对象的属性值不能作为另一个对象的属性名?
【发布时间】:2011-04-21 23:06:09
【问题描述】:

以下在我的 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


【解决方案1】:

对象字面量内的 ':' 左侧不允许有表达式。

请看这里:Why does my code return the error "missing : after property id" in JavaScript? 和这里http://www.dyn-web.com/tutorials/obj_lit.php

【讨论】:

  • 但是,如果您不介意初始化过程中的噪音和繁忙工作,您总是可以使用[] 来解决这个问题:var obj2 = { }; obj2[obj1.name] = obj1.val;
【解决方案2】:

我有一段时间没用过JS了,如果我错了请指正

如果你使用这个:

obj = {name : value};

那么您正在创建一个新对象,其中包含一个名为 name 的新字段。

所以当你尝试这样做时

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

您试图创建一个名为 obj1.name 的字段,该字段不是有效的标识符。

第二个

obj2 = {objName : obj1.val};

名称objName 是一个有效的标识符,所以这是可行的。但它没有使用变量objName,而是创建一个变量作为obj2的字段

【讨论】:

    【解决方案3】:

    我认为您对为什么第二个有效。

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-17
      • 2022-11-10
      • 2021-09-10
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多