Назначение значений объектам JSON в Javascript
это то, что я пытаюсь построить с помощью JavaScript в dot или [] нотации:
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, почему? и как присвоить значение description "описание"?
Я бы сделал так:
var shoppingCart = {
itemName : {
'description' : description,
'price' : price,
'quantity' : quantity,
'shipping' : shipping,
'total' : total
}
};
...но это делает ключ буквально itemName
вместо item1
.
4 ответов
shoppingCart[itemName]
не существует.
Сначала вам нужно создать его:
var shoppingCart = {};
shoppingCart[itemName] = { };
shoppingCart[itemName].description = 'This is Item #1';
или, еще лучше:
var shoppingCart = {};
shoppingCart[itemName] = { description: 'This is Item #1' };
в 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 };
Это не работает, потому что во втором примере вы пытаетесь индексировать пустой объект ключом, который не был установлен. Следующее будет работать...
var shoppingCart = {};
shoppingCart[itemName] = {};
shoppingCart[itemName]['description'] = '...';
потому что теперь shoppingCart[itemName] фактически является объектом.
просто FYI, альтернативное решение:
var itemName = {};
itemName.description = 'This is Item #1';
var shoppingCart = {};
shoppingCart.itemName = itemName;
или просто
var shoppingCart = {};
shoppingCart.itemName = { description: 'This is Item #1' };