7

这就是我试图通过 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
        }
    };

...但它实际上是 keyitemName而不是item1.

4

4 回答 4

12

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

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

或者,更好的是:

var shoppingCart = {};
shoppingCart[itemName] = { description: 'This is Item #1' };
于 2012-01-22T22:05:17.510 回答
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 };
于 2012-01-22T22:10:03.690 回答
1

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

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

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

于 2012-01-22T22:05:55.330 回答
0

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

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

要不就

var shoppingCart = {};
shoppingCart.itemName = { description: 'This is Item #1' };
于 2016-02-26T21:00:49.277 回答