2012-08-04 43 views
5

可以說我有名字的數組變量:如何從數組中動態創建JavaScript變量?

var varNames = new Array("name1","name2","name3"); 

如何通過剛剛通過varNames陣列循環創建var name1var name2var name3

+2

它通常不是動態地創建全局變量是個好主意。也許如果你描述了更大的局面,有人可能會提出更好的方法。 – JJJ 2012-08-04 08:54:00

回答

6

這將創建全局變量(在全局名稱空間中,即window)。

var varNames = ["name1","name2","name3"]; 
for (var i=0;i<varNames.length;i+=1){ 
    window[varNames[i]] = 0; 
} 
name1; //=> 0 

由於使用全局變量被認爲是不好的做法,你可以一個對象俗中創建變量:

var myVariables = {} 
    ,varNames = ["name1","name2","name3"]; 
for (var i=0;i<varNames.length;i+=1){ 
    myVariables[varNames[i]] = 0; 
} 
myVariables.name1; //=> 0 

編輯2017

使用es≥6:

const [v1, v2, v3] = ["name1","name2","name3"]; 
console.log(v1); // => name1 
+0

是否有你使用i + = 1而不是i ++的原因? – Danejir 2016-05-10 17:47:42

+1

它來自Douglas Crockford。他建議不要使用'++'運算符來避免混淆,如: 'var i = 5; var j = i ++;/* j現在是5,我是6 */ var k = ++ i;/* k現在是7,我是7 * /' – KooiInc 2016-05-11 17:15:29

2

你可以這樣做,如下所示。我添加了警報以證明您可以爲這些變量設置一個值。

var varNames = new Array("name1","name2","name3"); 
for(var i = 0; i < varNames.length; i++) { 
    window[varNames[i]] = i; 
} 
alert("name1: " + name1); 
alert("name2: " + name2); 
alert("name3: " + name3); 
1

直接回答你的問題是 - 你可以使用eval做到這一點:

var varNames = new Array("name1","name2","name3"); 

for (var i=0; i<varNames.length; i++) { 
    var varName = varNames[i]; 
    eval("var "+varName); // would be "var name1" 
} 

請注意,雖然這被認爲是不好的做法,通常沒有理由使用eval這樣的情況下, 。 另外請注意,這是比較常見的創建使用下面的樣式排列:

var varNames = ["name1", "name2", "name3"];