javascript eval()可以取变量名并在使用前替换它们吗?

Can javascript eval() take variables name and replace them before using

本文关键字:替换 eval 变量名 javascript      更新时间:2023-09-26

非常感谢您的阅读,

问题背景:在多个手风琴面板中使用spry的搜索功能。

我正在尝试使用eval(因为这是我能想到的唯一方法)来完成这个简单的事情:

var ds1 = new Spry.Data.XMLDataSet("ajaxxmllogdaneiz1.php",'root/row]');
var ds2 = new Spry.Data.XMLDataSet("ajaxxmllogdaneiz2.php",'root/row]');
var str1="ds";
var str2= 1;
var result= str1.concat(str2);
//result is now ds1
eval ("result.filter(filterFunc)");

我想调用ds1.filter(filterFunc),但是调用了result.filter(filterFunc)。是否有一种方法ds1.filter(filterFunc)被称为eval或替代品(Jquery?)?非常感谢恐龙

你应该使用这个:

eval(result + ".filter(filterFunc)");

但是你真的应该考虑 eval。我看不出这有什么可取之处。如果必须这样做,我建议将要操作的变量存储在一个已知的位置。例如:

​var Foo = function() {
    return {
        "bar": function() {
            console.log("baz");
        }
    }
};
var foo_list = {};
foo_list["foo"] = Foo();
var part_1 = "fo";
var part_2 = "o";
foo_list[part_1 + part_2].bar();

小提琴

(您也可以通过这种方式将其存储在window中,但我也不建议这样做。)

如果你要访问的变量在全局作用域中,那么你可以使用:

var result = 'ds1';
window[result].filter(filterFunc);

要使用result的值而不是"result"本身,您可以:

eval (result+".filter(filterFunc)");

除非执行完全任意的代码,否则不需要使用eval。

您可能希望将XMLDataSet s存储在数组中。

var datasets = [];
for (var n=1; n<=2; n++) {
    datasets.push(new Spry.Data.XMLDataSet("ajaxxmllogdaneiz" + n + ".php", "root/row"));
}
for (var i=0; i<datasets.length; i++) {
    var ds = datasets[i];
    ds.filter(filterFunc);
}