我正在研究ajax谷歌地图脚本,我需要在for循环中创建动态变量名。
for (var i = 0; i < coords.length; ++i) {
var marker+i = "some stuff";
}
我想得到的是:marker0
,marker1
,marker2
等等。
我想marker+i
Firebug给了我这个:missing ; before statement
答案 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是一个语句,并且(显然)不接受表达式。 不太好解释,但我希望它有所帮助。