簡體   English   中英

如何在循環內創建動態變量名?

[英]How do I create dynamic variable names inside a loop?

我正在處理 ajax 谷歌地圖腳本,我需要在 for 循環中創建動態變量名稱。

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

我想的是: marker0marker1marker2等。 我猜marker+i

Firebug 給了我這個: missing ; before statement 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"; 

關於迭代變量名,我喜歡使用模板文字制作動態變量。 每個 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]  */
}

您可以使用 eval() 方法來聲明動態變量。 但最好使用數組。

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

在這個 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();
var marker  = [];
for ( var i = 0; i < 6; i++) {               
     marker[i]='Hello'+i;                    
}
console.log(marker);
alert(marker);
 var marker+i = "some stuff";

可以這樣解釋:創建一個名為標記(未定義)的變量; 然后加到我; 然后嘗試為表達式的結果賦值,不可能 firebug 的意思是: var 標記; i = '一些東西'; 這就是螢火蟲期望在標記之后和 i 之前有一個逗號; var 是一個語句,不(顯然)接受表達式。 不是很好的解釋,但我希望它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM