2012-03-30 51 views
3

我有以下变量:jQuery的将一个字符串转换成一个对象而eval()函数

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

然后我在别处:

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

假设myparent收益 “类别”,我怎么能创造该字符串中引用变量opcategory的对象

例如:

var myarray = "op" + myparent; 

所以,我可能会使用对象,像这样:

alert(myarray[2]); 

谢谢!

+0

嗨,是否有一个原因,你不想用ev al()'?因为你使用jQuery,你可以使用[globalEval](http://api.jquery.com/jQuery.globalEval/) – NoLifeKing 2012-03-30 05:03:07

+0

人们告诉我它是邪恶的 – 2012-03-30 05:04:28

+0

'eval()'不是邪恶的,因为我有听到。如果你正确地使用它,并且只在你已经验证为正确的输入上,那并不坏。我的意思是,如果有人可以访问萤火虫,他们可以在任何他们想要的站点上使用'eval()',因为他们有一个控制台,它们为它们运行javascript。 :) – NoLifeKing 2012-03-30 05:08:00

回答

2

可以解决全局范围内声明的变量为:

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

明确搭售范围瓦尔到this

var myCustomVar = "my value" 
, nameOfVar = "myCustomVar" 
alert(this[nameOfVar]) 
// you get "my value" 

但是,如果你坚持它的功能,这里面不起作用作品虽然:

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

我认为一个对象是这个最好的解决办法:你可以参考这样的

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

var myarray = op[myparent]; 

还有一个不太雅致(读:邪恶和哈克)解决方案,仅在opday和其他全局变量时才有效。所有全局变量是window对象,它允许你动态创建和访问变量的属性:

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

如果需要通过名称来访问一个全局变量,以任何方式,做到这一点:

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

但将它们全部放入对象中会好得多。

相关问题