2013-03-24 87 views
0

有没有办法让一个变量的值成为另一个变量的名字?例如,我希望变量名称(value_of_i)成为以下数字:“i”在该迭代过程中。下面的while循环不是我使用它的,它只是解释我在问什么。有没有办法根据另一个变量的值创建一个动态变量名?

var i = 1; 
while(i<10) 
{ 

var value_of_i = "This loop has ran " + i + "times."; 

i++; 
} 

对于第一次迭代, “我” 等于1,所以我希望变量名是 “1”:

var 1 = "This loop has ran " + i + "times."; 

而第二个互为作用:

var 2 = "This loop has ran " + i + "times."; 
+0

看到这篇文章:http://stackoverflow.com/questions/6084858/javascript-use-variable-as-object-name – gongzhitaao 2013-03-24 18:33:59

+0

如何把所有数据放入json对象并访问myVar ['wantedIndex']?另外,您可以尝试window ['yourVariableName']全局数组。 – 2013-03-24 18:36:39

+1

fwiw'var 1 =“...”'无效。数字不能是javascript中的变量名称。 – 2013-03-24 18:37:00

回答

2

是的。使用bracket notation(这里是一个tutorial in MDN

Here is a working fiddle

时做类似containingObject[stringVariable]您正在访问的财产containingObject是存储在stringVariable值。

// this assumes browser JavaScript where window is the global namespace 
// in node.js this would be a little different 
var i=0; 
while(i<10){ 
    window["counters"+i] = "This is loop has ran " + i + "times."; 
    i++; 
} 
console.log(counters3); 

如果您想,您可以使用this而不是窗口的,但是这可能会在严格模式失败。

这里的括号标记从上面的MDN链接是如何工作的主要解释:JavaScript对象

属性还可以访问或使用括号标记设置。对象有时称为关联数组,因为每个属性都与一个可用于访问它的字符串值相关联。

var propertyName = "make"; 
myCar[propertyName] = "Ford"; 

propertyName = "model"; 
myCar[propertyName] = "Mustang"; 
0

您可以:

myCar["make"] = "Ford"; 
myCar["model"] = "Mustang"; 
myCar["year"] = 1969; 

您还可以通过使用存储在一个变量的字符串值访问属性:因此,举例来说,你可以按如下方式访问myCar对象的属性变数名不是一个有效的名称。所以var 1=""无效。

但动态设置,你可以做

var x = "variablenamehere"; 

window[x] = "variablevaluehere"; 

那一样

VAR variablenamehere

除了将作用域为全局变量,将可以访问无处不在的价值,而不仅限于当前的功能范围。

0

为什么不把你的strings存储在i索引的array

通过这种方式,您可以稍后高效且轻松地引用它们;

var loopI = new Array(); 

for(var i = 0; i < 10; ++i) { 
    loopI[i] = "This loop has ran " + i + "times."; 
} 
0

这工作:

var o = {}; 
var d = "dog"; 
for (var k = 0; k < 5; k += 1) { 
    o[d+k] = k*100; 
} 
console.log(o.dog3); // 300 

这更接近做你想要什么:

var N = {}; 
var M = {}; 
var i = 1; 
while(i<10) 
{ 
    N[i] = "This loop ran " + i + " times."; 
    // Or, so you can use dot notation later: 
    M['OO'+i] = "This loop ran " + i + " times."; 
    // Those are capital O's, not zeros. Numbers won't work. 
    i++; 
} 
console.log(N[3]); // This loop ran 3 times. 
console.log(M.OO7); // This loop ran 7 times. 

的“OO”符号可能会导致他人试图用困惑和时间浪费你的码;但它也可能是他们娱乐的来源。这让我想起白棋前两步棋后的一个棋盘,是要带出一名骑士,然后把它放回去。董事会似乎表明,黑人先行,有些人会无休止地坚持认为,配置证明存在非法玩法,除非有人告诉他们发生了什么事。

相关问题