如何将字符串值转换为JavaScript中的变量?
var test1;
$(document).ready(function() {
test1 = $("#test1ID").jQueryPlugin();
});
var test2;
$(document).ready(function() {
test2 = $("#test2ID").jQueryPlugin();
});
...
这样做是为了我们可以做test1.foo()
... foo是jQueryPlugin中的一个函数,可以使用test1.foo()
语法访问;如何将字符串值转换为JavaScript中的变量?
所以我们有一个包含字符串(TEST1,TEST2,...) 的数组,我们需要访问环路FOO(),而:
for(i=0; i < theArrayOfStrings.length; i++){
theArrayOfStrings[i].foo();
//so here is the problem... we can't do test1.foo(), test2.foo() ... =(
}
如何调用函数的任何想法foo(),而在循环? 或者我们可以在javascript中将字符串值转换为变量吗?
eval() function用来在一个字符串变量来评估脚本。例如:
var test1;
eval("test1=" + theArrayOfStrings[i]);
test1.foo();
而是采取了永乐在这个问题在使用前When is JavaScript’s eval() not evil?
var test = [], n = 5;
$(document).ready(function() {
for(var i=0; i < n; i++)
test.push($("#test"+i+"ID").jQueryPlugin());
});
// the values in test won't be accessible before the document is loaded.
test1ID,和test2ID实际上应该是硬编码。=( – Jronny 2009-12-12 13:42:40
这可能是值得创建一个对象来保存你所有的“试验”:
var tests = {};
$(document).ready(function() {
tests.test1 = $("#test1ID").jQueryPlugin();
tests.test2 = $("#test2ID").jQueryPlugin();
});
for(i=0; i < theArrayOfStrings.length; i++){
tests[theArrayOfStrings[i]].foo();
}
好主意,但问题是如果我不使用循环访问foo ()而言,我使用一个
这不是一个问题二。 'test [document.getElementById('myselect').value] .foo()' – bobince 2009-12-12 14:27:19
如果test1
是一个全局变量,可以通过window
对象的名称进行访问:
window[theArrayOfStrings[0]].foo(); // test1();
如果不是,eval
是唯一的方法,但我强烈建议在所有情况下避免eval
。在J-P的回答(+1)中使用查找比选择变量名称更合适。
或者更一般地说,您可以使用* this *而不是* window *,如:this ['test1'](); // test1(); 但是,您仍然只能引用全局变量,而不是本地变量。 – 2009-12-12 13:34:54
这里的问题可能是,如果test1不是一个全局变量...... – Jronny 2009-12-12 13:40:39
那么,你可以用arguments.callee获取当前函数。但是你仍然不能以这种方式访问函数的本地(内部)变量。所以,你可以声明变量作为函数的属性,如:arguments.callee.test1 = ...;然后arguments.callee ['test1']()。但是这种方式回到了J-P的主张,我认为这是最干净的解决方案。 – 2009-12-12 14:00:03
eval不是这个问题的解决方案 – 2009-12-12 12:59:34
你读过OP的评论at astander的回答吗 – Canavar 2009-12-12 13:06:06
这是行得通的...如果这是唯一的选择,那么我会给它一个。谢谢! – Jronny 2009-12-12 13:38:44