我想知道是否可以在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})");
您将需要分两步构建对象,并使用[]
属性访问器:
var parameter = 'animal';
var value = 'pony';
var obj = {};
obj[parameter] = value;
Util.urlAppendParameters (url, obj);
我不认为JSON Array是更正确的术语,我将其称为Objectliteral。
根据您的需求,您还可以使用辅助函数来构建对象;
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"));