有没有办法根据另一个变量的值制作动态变量名?

时间:2013-03-24 18:31:20

标签: javascript

有没有办法让变量的值成为另一个变量的名称?例如,我希望变量名称( value_of_i )是在该迭代期间“i”的数字。下面的while循环不是我用它的,它只是解释我在问什么。

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

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

i++;
}

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

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

第二次互动:

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

4 个答案:

答案 0 :(得分: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对象的属性。对象有时称为关联数组,因为每个属性都与可用于访问它的字符串值相关联。因此,例如,您可以按如下方式访问myCar对象的属性:

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

您还可以使用存储在变量中的字符串值来访问属性:

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

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

答案 1 :(得分:0)

您不能将变量名称设为数字,而不是有效名称。因此var 1=""无效。

但要动态设置你可以做的值

var x = "variablenamehere";

window[x] = "variablevaluehere";

相同

var variablenamehere

除了它将作为全局变量确定范围并且可以在任何地方访问,而不是局限于当前的函数范围。

答案 2 :(得分:0)

为什么不将strings存储在array索引的i中?

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

var loopI = new Array();

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

答案 3 :(得分: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”符号可能会导致其他人试图使用您的代码时感到困惑和浪费时间;但它也可能成为他们娱乐的源泉。这让我想起了白棋的前两个动作是带出一个骑士然后把它放回来的棋盘。然后董事会似乎表明黑人首先移动,有些人会无休止地坚持认为配置证明存在非法游戏,除非有人告诉他们发生了什么。