jQuery将字符串转换为没有eval()的对象

时间:2012-03-30 04:56:29

标签: jquery string variables object

我有以下变量:

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

然后我在其他地方:

        var myparent = $me.parent().attr('data-filter-group');

假设myparent返回“category”,如何从该字符串创建一个引用变量opcategory的对象?

例如:

var myarray = "op" + myparent;

所以我可以像这样使用那个对象:

alert(myarray[2]);

谢谢!

3 个答案:

答案 0 :(得分:3)

我认为对象是最佳解决方案:

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

您可以这样引用:

var myarray = op[myparent];

还有一个不那么优雅(阅读:邪恶和hacky)的解决方案只有在opday和其他全局变量时才有效。所有全局变量都是window对象的属性,允许您动态创建和访问变量:

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

答案 1 :(得分:2)

如果您需要按名称访问全局变量,请执行以下操作:

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

但将所有这些内容放入 map 对象会好得多。

答案 2 :(得分: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"