0

有没有办法让一个变量的值成为另一个变量的名称?例如,我希望变量名 ( 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

4 回答 4

2

是的。使用括号表示法(这是MDN 中的教程

这是一个工作小提琴

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";
于 2013-03-24T18:33:38.613 回答
0

您不能将变量名称设为数字,它不是有效名称。所以var 1=""无效。

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

var x = "variablenamehere";

window[x] = "variablevaluehere";

那是一样的

var 变量名here

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

于 2013-03-24T18:34:25.310 回答
0

为什么不将您的存储stringsarray由 索引的i

这样您就可以在以后高效、轻松地引用它们;

var loopI = new Array();

for(var i = 0; i < 10; ++i) {
    loopI[i] = "This loop has ran " + i + "times.";
}
于 2013-03-24T18:35:14.023 回答
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' 符号可能会导致其他人试图使用您的代码时感到困惑和浪费时间;但它也可能是他们的娱乐来源。这让我想起了一个棋盘,白棋的前两步是带出一个马然后放回去。然后棋盘似乎显示黑棋先走,有些人会无休止地坚持认为该配置证明存在非法游戏,除非有人告诉他们发生了什么。

于 2014-01-21T22:57:17.260 回答