首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript eval()是否可以接受变量名称并在使用之前替换它们

javascript eval()是否可以接受变量名称并在使用之前替换它们
EN

Stack Overflow用户
提问于 2012-12-30 16:34:31
回答 4查看 2K关注 0票数 0

感谢您的阅读,

问题上下文:在多个折叠面板中使用spry的搜索功能。

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

代码语言:javascript
复制
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)。有没有办法通过eval或替代方案(Jquery?)来调用ds1.filter(filterFunc)?非常感谢Dinos

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-30 16:41:43

对于使用result的值而不是"result"本身,您可以这样做:

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

票数 1
EN

Stack Overflow用户

发布于 2012-12-30 16:41:52

您应该使用以下代码:

代码语言:javascript
复制
eval(result + ".filter(filterFunc)");

但你真的应该考虑根本不使用eval。我不明白为什么这会是可取的。如果必须,我建议将要操作的变量存储在一个已知的位置。例如:

代码语言:javascript
复制
​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();

fiddle

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

票数 4
EN

Stack Overflow用户

发布于 2012-12-30 16:42:40

如果您试图访问的变量在全局范围内,则可以使用:

代码语言:javascript
复制
var result = 'ds1';

window[result].filter(filterFunc);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14089388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档