Я задаюсь вопросом, возможно ли использовать присвоенные переменные в качестве идентификатора в массиве json. Когда я попробовал это, я получал некоторые неожиданные результаты:
(Код упрощен, параметры передаются по-другому),
var parameter = 'animal'; var value = 'pony'; Util.urlAppendParameters (url, {parameter : value}); Util.urlAppendParameters = function(url, parameters) { for (var x in parameters) { alert(x); } }
Теперь в аварийном всплывающем окне говорится: 'параметр' вместо 'животного'. Я знаю, что мог использовать другой метод (создающий массив и присваивающий каждый параметр на новой строке), но я хочу сохранить свой код компактным.
Таким образом, мой вопрос: действительно ли возможно использовать переменную в качестве идентификатора в массиве json, и если так, Вы могли сказать мне как?
Заранее спасибо!
Нет, вы не можете использовать переменную в качестве идентификатора в подобном литерале объекта. Парсер ожидает там имя, поэтому вы ничего не можете сделать, кроме как предоставить строку. Точно так же нельзя сделать что-то вроде этого:
var parameter = 'animal';
var parameter = 'value'; //<- Parser expects a name, nothing more, so original parameter will not be used as name
Если вы действительно хотите использовать литерал объекта в одной строке, можно обойтись только с помощью eval:
Util.urlAppendParameters (url, eval("({" + parameter + " : value})");
В зависимости от ваших потребностей вы также можете построить свой объект с помощью вспомогательной функции;
Util.createParameters = function(args) {
var O = {};
for (var i = 0; i < arguments.length; i += 2)
O[arguments[i]] = arguments[i + 1];
return O
}
Util.urlAppendParameters (url, Util.createParameters(parameter, value, "p2", "v2"));
Вам нужно будет построить свой объект в два этапа и использовать аксессор свойства []
:
var parameter = 'animal';
var value = 'pony';
var obj = {};
obj[parameter] = value;
Util.urlAppendParameters (url, obj);
Я не думаю, JSON Array - более правильный термин, я бы назвал его литералом объекта .