我有一個函數想要訪問一個全局變量,其名稱作爲字符串參數到達。這是現在的樣子,使用eval:試圖避免eval從窗口對象獲取數組元素
function echoVar(whichone){
document.write(eval(whichone));
}
我想我只是用窗口[]語法和有這樣的:
function echoVar(whichone) {
document.write(window[whichone]);
}
如果我創建一個變種,並調用它像這樣,它的文檔寫ABC預期:
var abc = "ABC";
echoVar("abc");
如果我要訪問的變種是雖然一個數組元素,這是行不通的:
var def = ["DEF"];
echoVar("def[0]"); //fails with undefined
很明顯,這實際上是執行window [def [0]],它正確地給出了未定義的(因爲沒有稱爲DEF的變量)。我真正想要發生的是它執行窗口[「def」] [0]。
我知道要做到這一點的唯一方法就是用「[」作爲分隔符,然後使用split [0]作爲窗口索引和split [1]上的parseInt來分割哪個參數得到的索引,像這樣:
function echoVar(whichone){
if(whichone.indexOf("[")==-1){
document.write(window[whichone]);
}
else{
var s = whichone.split("[");
var nam = s[0];
var idx = parseInt(s[1]);
document.write(window[nam][idx]);
}
}
我可以忽略一些明顯的東西嗎?我寧願保持評估,也不願意做所有這些。
難道沒有辦法讓價值以更好的方式傳遞嗎? –
這是一個實驗還是您正在嘗試將此技術用於生產用途? –
我正在使用一個庫(如jquery,但不是jQuery),它恰好以這種方式傳遞了var的名稱。可悲的是我不能改變我收到的東西,只是我如何使用它。 – Dee2000