2010-06-22 36 views
0

我想動態地創建和引用一些變量,但我不知道如何去做。在for語句中使用動態變量

下面是我想'應該'的工作,但我知道不。

var weeks = 4; 
for(i=0; i<weeks.length;i++){ 
    var 'week_'+i = valueFromXML; 
} 



function wtFn(){ 
    'week_'+i.splice(-1, 1); 
    if('week_'+i.length <=0){ 
    $(this).parent().parent().slideUp(); 
    } 
} 

我很樂意提供建議。提前致謝。

回答

2

您不能動態聲明變量而不使用eval,這並不被認爲是一種好的做法。

我會建議你使用對象的值存儲爲屬性:

var weeks = 4; 
var obj = {}; 
for(var i = 0; i< weeks; i++){ 
    obj['week_'+i] = valueFromXML; 
} 

然後你就可以像訪問屬性:

alert(obj['week_'+i]); 
1

你想使用數組。

var weeks = new Array(); 

for(i=0; i < weeks.length;i++) { 
    weeks[i] = valueFromXML; 
} 
+0

我想我要做的是實際上創建一個對象,就像上面的答案,但也動態地創建一系列的數組內的對象。 for(i = 0; i Jason 2010-06-22 22:48:24

+1

@Jason:應該工作得很好... – Shog9 2010-06-22 23:12:31

+0

@ Shog9 - 它似乎工作,但我不能提前陣列位置填補下一個點... tempVar ['周'+我]。例如,推(日)需要與tempVar.week0 [i] .push(日)相同。但我無法弄清楚如何正確添加陣列位置[i]。 – Jason 2010-06-23 00:49:19

0

正如其他人所指出的,數組或對象是要走的路。但是如果你確實需要,你可以創建動態變量 - 或者你可以創建全局對象的成員window。假設這是在瀏覽器中執行,這樣做:

var weeks = 4; 
for(i=0; i<weeks.length;i++){ 
    var window['week_'+i] = valueFromXML; 
} 



function wtFn(){ 

    window['week_'+i].splice(-1, 1); 
    if(window['week_'+i].length <=0){ 
    $(this).parent().parent().slideUp(); 
    } 
} 

這工作,因爲在瀏覽器中,window['xyz']將返回相同的對象xyz(這是假設xyz不是一個函數內部使用的關鍵字var創建)。