jQuery如何将字符串转换为对象而不使用eval()函数

3

我有以下变量:

    var opday = [],
        opcategory = [],
        opbarrio = [];

那么我在别处有一个内容:
        var myparent = $me.parent().attr('data-filter-group');

假设myparent返回"category",我该如何从该字符串创建一个对象,引用变量opcategory?
例如:
var myarray = "op" + myparent;

因此,我可以这样使用该对象:

alert(myarray[2]);

谢谢!


嗨,你不想使用 eval() 的原因是什么?由于你正在使用 jQuery,你可以使用 globalEval - NoLifeKing
人们告诉我这是邪恶的。 - HandiworkNYC.com
据我所知,eval()并不是邪恶的。如果你正确地使用它,并且只对你已经验证为正确的输入进行操作,那么它并不会带来太大的问题。我的意思是,如果有人可以访问Firebug,他们可以在任何他们想要的网站上使用eval(),因为他们有一个可以运行JavaScript的控制台。 :) - NoLifeKing
@NoLifeKing 在这种情况下使用eval会很糟糕、丑陋和低效。 - Peter Olson
@PeterOlson 啊,没考虑到效率的问题...不知道eval()会很慢。或者我可能误解了问题。 - NoLifeKing
3个回答

3

我认为一个对象是这个问题的最佳解决方案:

var op = {
  day: [],
  category: [],
  barrio: []
};

您可以像这样引用:

var myarray = op[myparent];

还有一种不那么优雅(也就是使用了一些不好的技巧)的解决方案,只适用于 opday 和其他变量是全局变量的情况。所有的全局变量都是 window 对象的属性,这使得您可以动态地创建和访问变量:

var myarray = window["op" + myparent];

2
如果您需要通过任何方式访问全局变量的名称,请执行此操作:
var myarray = window["op"+myparent];

但是将它们全部放入一个map对象中会更好。


2
您可以使用以下方式访问全局范围内声明的变量:
var myCustomVar = "my value"
, nameOfVar = "myCustomVar"
alert(this[nameOfVar])
// you get "my value"

然而,如果你将它放在函数内部,这种方法是行不通的:
var answer = (
    function(){
        var myvar = "the value"
        return this["myvar"]
    }
).call({})
// answer will be 'undefined'

将作用域变量明确绑定到this是可行的:

var answer = (
    function(){
        this.myvar = "the value"
        return this["myvar"]
    }
).call({})
// 'answer' will be "the value"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接