我正在处理 ajax 谷歌地图脚本,我需要在 for 循环中创建动态变量名称。
for (var i = 0; i < coords.length; ++i) {
    var marker+i = "some stuff";
}
我想得到的是:marker0, marker1,marker2等等。我想有什么问题marker+i
Firebug 给了我这个: missing ; before statement
我正在处理 ajax 谷歌地图脚本,我需要在 for 循环中创建动态变量名称。
for (var i = 0; i < coords.length; ++i) {
    var marker+i = "some stuff";
}
我想得到的是:marker0, marker1,marker2等等。我想有什么问题marker+i
Firebug 给了我这个: missing ; before statement
为此使用数组。
var markers = [];
for (var i = 0; i < coords.length; ++i) {
    markers[i] = "some stuff";
}
我同意通常最好为此使用 an 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 的这个有点奇怪的特性很少使用(有充分的理由),但在某些情况下它可能很有用。
试试这个
window['marker'+i] = "some stuff"; 
关于迭代变量名,我喜欢使用模板文字制作动态变量。每个 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()获得的value是一种跛脚的,当你使用自动得到它。
_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]  */
}
您可以使用 eval() 方法来声明动态变量。但最好使用数组。
for (var i = 0; i < coords.length; ++i) {
    var str ="marker"+ i+" = undefined";
    eval(str);
}