2011-07-10 70 views
0

有人可以告訴我,如果這是有效的JavaScript?我知道你不可能做這種在C#中,但爵士的事情是一個非常寬鬆的語言..動態Javascript - 這是否有效?

var arrayToUse = "arr" + sender.value; 
for (i = 0; i <= arrayToUse.length; i++) { 
    // something.. 
} 

明確 - 動態生成的數組名..

更新..

所以我有一個名爲arrMyArray的數組,它在文檔準備就緒時被初始化。 sender.value =「MyArray」 - 但可能是其他東西,例如MyArray2

我想對sender.value值指示的數組進行遍歷迭代。

+0

什麼是「sender.value」?哪裏是「」arr「+ sender.value」分配? – Mrchief

+0

它只是從控件傳遞的一串文本。 – Grant

+4

呃...'arrayToUse'將是一個字符串,'arrayToUse.length'會給你字符串的長度。 'arrayToUse'不會神奇地成爲一個數組。 –

回答

6

是的,這是完全有效的。

arrayToUse將是一個字符串(不管sender.value值 - 它會被轉換爲一個字符串),並i將從0迭代到字符串的長度)。

一個小問題:它應該是for (**var** i = 0; …),否則i將被視爲一個全局變量,如果您有多個循環同時運行,幾乎肯定會結束。

編輯:你想獲得基於名稱的數組?在這種情況下,你必須在數組定義的任何上下文中查找它。如果它是一個全局數組,請使用window

例如:

var arrayName = "arr" + sender.value; 
var array = window[arrayName]; 
… 
+0

感謝大衛,但我想要做的是迭代一個實際的數組,有字符串的名稱..有道理? – Grant

+1

雖然有效(它做了一些事情,而且沒有語法錯誤),但我認爲它並沒有達到作者所期望的目的。 – Zach

+0

@Grant:看我的編輯。 –

1

爲了得到一個變量定義的變量名,你需要使用eval,像這樣:

var arrayToUse = eval("arr" + sender.value); 

但是,你必須非常小心,因爲控制sender.value將允許某人以這種方式劫持您的整個應用程序。你通常應該嘗試找到另一種解決方案。

如果在全局定義變量,則可以將其替換爲window["arr" + sender.value]。這仍然不理想,但不是安全風險。

+0

我會盡量避免不惜一切代價使用'eval' – tjameson

1

您需要做的是訪問名稱爲的變量「arr」+ sender.value。訪問其內容是「改編+ sender.value不會做你想要的變量 - 這只是一個字符串

與此名稱訪問變量,你可以看看它作爲一個全球性的(全局在瀏覽器窗口對象的成員):

window["arr" + sender.value] 

這比使用eval(),因爲它不會在JavaScript執行上下文中運行代碼,以評估該字符串更安全,更快速 - 它只是查找窗口對象中帶有該名稱的變量