У меня есть функция, которая хочет получить доступ к глобальной переменной, имя которой появляется в виде строкового аргумента.Вот как это выглядит сейчас, используя 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
Очевидно,это фактически выполняет окно [def [0]], которое справедливо дает неопределенное значение (потому что нет переменной с именем DEF).На самом деле я хочу, чтобы он выполнял window ["def"] [0].
Единственный способ, которым я знаю, чтобы добиться этого, - это разделить параметр whichone с "[" в качестверазделитель, а затем используйте split [0] в качестве индекса окна и parseInt в split [1], чтобы получить индекс, например:
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] );
}
}
Я пропускаю что-то очевидное?Я предпочел бы сохранить Eval, чем делать все это.