我想知道是否可以在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数组中使用变量作为标识符,若然,请告诉我如何?
提前致谢!
答案 0 :(得分:10)
您需要分两步构建对象,并使用[]
属性访问器:
var parameter = 'animal';
var value = 'pony';
var obj = {};
obj[parameter] = value;
Util.urlAppendParameters (url, obj);
我认为 JSON Array 是更正确的术语,我称之为 Object literal 。
答案 1 :(得分:3)
不,您不能将变量用作对象文字中的标识符。解析器期望在那里有一个名称,所以除了提供字符串之外你不能做太多其他事情。同样,你不能做这样的事情:
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})");
答案 2 :(得分:1)
根据您的需要,您还可以使用辅助函数构建对象;
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"));