我正在开发一个Ajax Google Maps脚本,需要在for循环中创建动态变量名。
for (var i = 0; i < coords.length; ++i) {
var marker+i = "some stuff";
}
我想要的是:marker0
、marker1
、marker2
等等。
但我猜测 marker+i
有什么问题。
Firebug 给出的错误信息是:missing ; before statement
。
我正在开发一个Ajax Google Maps脚本,需要在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";
}
我同意通常最好使用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";
关于迭代变量名称,我喜欢使用模板字面量创建动态变量。每个人都使用数组样式,这很好。 直到你要同时处理数组和动态变量时,哦,天哪!会让你的眼睛受不了。由于模板字面量目前的支持有限,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] */
}
function wildname(evenwilder){eval(evenwilder)(wild1)}
- Timofor (var i = 0; i < coords.length; ++i) {
var str ="marker"+ i+" = undefined";
eval(str);
}
eval
和 array
。 - Timofunction 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();
var marker = [];
for ( var i = 0; i < 6; i++) {
marker[i]='Hello'+i;
}
console.log(marker);
alert(marker);
var marker+i = "some stuff";
可以这样解释: 创建一个名为marker的变量(未定义); 然后添加到i; 然后尝试将值分配给表达式的结果,不可能。 Firebug的意思是这样的: var marker; i = '一些东西'; 这就是Firebug在marker和i之间期望逗号的原因; var是一个语句,不接受表达式(显然)。 解释不太好,但希望有所帮助。