【问题标题】:Assigning Values to JSON Objects in Javascript在 Javascript 中为 JSON 对象赋值
【发布时间】:2012-02-16 10:03:16
【问题描述】:

这是我试图通过 JavaScript 以点或 [ ] 表示法构建的:

var shoppingCart = { 
        'item1' : {
            'description' : 'This is item #1',
            'price' : 10,
            'quantity' : 1,
            'shipping' : 0,
            'total' : 10
        }
    };

现在如果'item1'是变量名itemName

这可行:
var shoppingCart = {};
shoppingCart[itemName] = itemName;
alert(shoppingCart.item1);

返回item1

但这不起作用:
1 var shoppingCart = {};
2 shoppingCart[itemName]['description'] = 'This is Item #1';

JS 在第 2 行就死了,为什么?以及如何将描述值分配给“描述”?

我会这样做:

var shoppingCart = { 
        itemName : {
            'description' : description,
            'price' : price,
            'quantity' : quantity,
            'shipping' : shipping,
            'total' : total
        }
    };

...但它使键字面意思是itemName 而不是item1

【问题讨论】:

    标签: javascript json object assign


    【解决方案1】:

    shoppingCart[itemName] 不存在。
    您需要先创建它:

    var shoppingCart = {};
    shoppingCart[itemName] = { };
    shoppingCart[itemName].description = 'This is Item #1';
    

    或者,更好:

    var shoppingCart = {};
    shoppingCart[itemName] = { description: 'This is Item #1' };
    

    【讨论】:

    • 同样shoppingCart[itemName]['description'] 等价于shoppingCart[itemName].description。仅当动态访问属性obj[propNameString] 或包含点符号obj['some-prop-name'] 的非法字符时,才需要使用[] 访问属性。
    • 是的 thnx,这就是我到处阅读的内容,但关键是 shoppingCart[itemName] = { }; 我每天对对象的理解越来越多!
    【解决方案2】:

    在 javascript 中,对象不会在成员访问时自动创建;你必须先创建对象:

    var shoppingCart = {};
    shoppingCart["item1"] = {}; // This creates the object
    shoppingCart["item1"]["description"] = "This is item #1"; // add a member
    

    请注意,您当然也可以使用

    一次创建整个对象
    shoppingCart[itemname] = { "description": description,
                               "price": price,
                               "quantity": quantity,
                               "shipping": shipping,
                               "total": total };
    

    【讨论】:

      【解决方案3】:

      它不起作用,因为在您的第二个示例中,您尝试使用尚未设置的键索引一个空白对象。以下将起作用...

      var shoppingCart = {};
      shoppingCart[itemName] = {};
      shoppingCart[itemName]['description'] = '...';
      

      因为现在 shoppingCart[itemName] 实际上是一个对象。

      【讨论】:

        【解决方案4】:

        仅供参考,替代解决方案:

        var itemName = {};
        itemName.description = 'This is Item #1';
        var shoppingCart = {};
        shoppingCart.itemName = itemName;
        

        或者只是

        var shoppingCart = {};
        shoppingCart.itemName = { description: 'This is Item #1' };
        

        【讨论】:

          猜你喜欢
          • 2022-12-20
          • 2019-03-14
          • 2015-01-21
          • 1970-01-01
          • 2013-05-12
          • 1970-01-01
          • 2012-11-16
          • 1970-01-01
          • 2020-12-23
          相关资源
          最近更新 更多