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
        }
    };

...しかし、キーを文字通りitemNameの代わりに作成します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

2 番目の例では、キーが設定されていない空のオブジェクトにインデックスを付けようとしているため、機能しません。以下は動作します...

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 に答える