2012-03-30 58 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]; 

但將它們全部放入對象中會好得多。

相關問題