如何在循环内创建动态变量名?

时间:2011-11-24 16:36:24

标签: javascript jquery google-maps

我正在研究ajax谷歌地图脚本,我需要在for循环中创建动态变量名。

for (var i = 0; i < coords.length; ++i) {
    var marker+i = "some stuff";
}

我想得到的是:marker0marker1marker2等等。 我想marker+i

有问题

Firebug给了我这个:missing ; before statement

8 个答案:

答案 0 :(得分:86)

为此使用数组。

var markers = [];
for (var i = 0; i < coords.length; ++i) {
    markers[i] = "some stuff";
}

答案 1 :(得分:41)

我同意通常最好使用Array

但是,这也可以通过简单地向当前范围添加属性(全局范围,如果是顶级代码; 函数范围)在JavaScript中完成,如果在函数内)只需使用this - 它总是指当前范围。

for (var i = 0; i < coords.length; ++i) {
    this["marker"+i] = "some stuff";
}

您可以稍后检索存储的值(如果您在设置它们的范围内):

var foo = this.marker0;
console.log(foo); // "some stuff"

JavaScript的这个有点奇怪的功能很少使用(有充分理由),但在某些情况下它可能很有用。

答案 2 :(得分:12)

试试这个

window['marker'+i] = "some stuff"; 

答案 3 :(得分:3)

关于迭代变量名,我喜欢使用Template literals制作动态变量。每个Tom,Dick和Harry都使用阵列式,这很好。在你使用数组动态变量之前,哦,小男孩!眼睛流血过载。由于模板文字现在支持有限,eval()甚至是另一种选择。

v0 = "Variable Naught";
v1 = "Variable One";

for(i = 0; i < 2; i++)
{//console.log(i) equivalent is console.log(`${i}`)
  dyV = eval(`v${i}`);
  console.log(`v${i}`); /* => v0;   v1;  */      
  console.log(dyV);  /* => Variable Naught; Variable One;  */
}

当我在浏览API的过程中,我制作了这个小循环片段来查看行为,这取决于模板文字与Ruby相比所做的事情。我更喜欢Ruby的行为;当你习惯于自动获取价值时,需要使用eval()来获取价值。

_0 = "My first variable"; //Primitive
_1 = {"key_0":"value_0"}; //Object
_2 = [{"key":"value"}]    //Array of Object(s)


for (i = 0; i < 3; i++)
{
  console.log(`_${i}`);           /*  var
                                   * =>   _0  _1  _2  */

  console.log(`"_${i}"`);         /*  var name in string  
                                   * => "_0"  "_1"  "_2"  */

  console.log(`_${i}` + `_${i}`); /*  concat var with var
                                   * => _0_0  _1_1  _2_2  */

  console.log(eval(`_${i}`));     /*  eval(var)
                                   * => My first variable
                                        Object {key_0: "value_0"}
                                        [Object]  */
}

答案 4 :(得分:1)

您可以使用eval()方法声明动态变量。但最好使用数组。

for (var i = 0; i < coords.length; ++i) {
    var str ="marker"+ i+" = undefined";
    eval(str);
}

答案 5 :(得分:0)

在这个 dynamicVar 中,我正在创建动态变量“ele[i]”,其中我将根据索引放置“arr”的值/元素。 ele 初始阶段为空,因此我们将数组“ele”中的“arr”元素进行复制。

function dynamicVar(){
            var arr = ['a','b','c'];
            var ele = [];
            for (var i = 0; i < arr.length; ++i) {
                ele[i] = arr[i];
 ]               console.log(ele[i]);
            }
        }
        
        dynamicVar();

答案 6 :(得分:-1)

var marker  = [];
for ( var i = 0; i < 6; i++) {               
     marker[i]='Hello'+i;                    
}
console.log(marker);
alert(marker);

答案 7 :(得分:-5)

 var marker+i = "some stuff";

coudl可以解释为: 创建一个名为marker的变量(undefined);然后添加到i;然后尝试为表达式的结果赋值,不可能。 萤火虫说的是这样的: var marker;我='有些东西'; 这就是萤火虫在标记之后和我之前所期望的逗号; var是一个语句,并且(显然)不接受表达式。 不太好解释,但我希望它有所帮助。