【发布时间】:2011-12-02 00:44:17
【问题描述】:
我有一个想要访问全局变量的函数,该变量的名称作为字符串参数到达。这是现在的样子,使用 eval:
function echoVar(whichone){
document.write(eval(whichone));
}
我以为我只需要使用 window[] 语法就可以了:
function echoVar(whichone) {
document.write(window[whichone]);
}
如果我创建一个 var 并像这样调用它,它会按预期写入 ABC:
var abc = "ABC";
echoVar("abc");
如果我要访问的 var 是一个数组元素,它就不起作用:
var def = ["DEF"];
echoVar("def[0]"); //fails with undefined
显然,这实际上是在执行 window[def[0]] ,它正确地给出了 undefined (因为没有名为 DEF 的变量)。我真正想要发生的是它执行 window["def"][0].
我知道实现这一点的唯一方法是使用“[”作为分隔符对 whichone 参数进行拆分,然后使用拆分 [0] 作为窗口索引,并在拆分 [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] );
}
}
我是否忽略了一些明显的东西?我宁愿保留 eval 而不是必须做所有这些。
【问题讨论】:
-
有没有办法让值以更好的方式传递?
-
这是一个实验还是您正在尝试将此技术用于生产用途?
-
我正在使用一个库(像 jquery 但不是 jquery),它恰好以这种方式向我传递了 var 的名称。遗憾的是,我无法更改收到的内容,只能更改我的使用方式。
标签: javascript eval