我有一个函数想要访问一个全局变量,其名称作为字符串参数到达。这是现在的样子,使用eval:试图避免eval从窗口对象获取数组元素
function echoVar(whichone){
document.write(eval(whichone));
}
我想我只是用窗口[]语法和有这样的:
function echoVar(whichone) {
document.write(window[whichone]);
}
如果我创建一个变种,并调用它像这样,它的文档写ABC预期:
var abc = "ABC";
echoVar("abc");
如果我要访问的变种是虽然一个数组元素,这是行不通的:
var def = ["DEF"];
echoVar("def[0]"); //fails with undefined
很明显,这实际上是执行window [def [0]],它正确地给出了未定义的(因为没有称为DEF的变量)。我真正想要发生的是它执行窗口[“def”] [0]。
我知道要做到这一点的唯一方法就是用“[”作为分隔符,然后使用split [0]作为窗口索引和split [1]上的parseInt来分割哪个参数得到的索引,像这样:
function echoVar(whichone){
if(whichone.indexOf("[")==-1){
document.write(window[whichone]);
}
else{
var s = whichone.split("[");
var nam = s[0];
var idx = parseInt(s[1]);
document.write(window[nam][idx]);
}
}
我可以忽略一些明显的东西吗?我宁愿保持评估,也不愿意做所有这些。
难道没有办法让价值以更好的方式传递吗? –
这是一个实验还是您正在尝试将此技术用于生产用途? –
我正在使用一个库(如jquery,但不是jQuery),它恰好以这种方式传递了var的名称。可悲的是我不能改变我收到的东西,只是我如何使用它。 – Dee2000