Динамический Javascript - это действительно?
Может кто-нибудь сказать мне, если это действительный JavaScript? Я знаю, что вы не можете делать такие вещи в C#, но JS гораздо более свободный язык..
var arrayToUse = "arr" + sender.value;
for (i = 0; i <= arrayToUse.length; i++) {
// something..
}
конкретно - динамическая генерация имени массива..
Обновить..
поэтому у меня есть массив с именем arrMyArray, который инициализируется в готовом документе. sender.value = "MyArray" - но может быть что-то еще, например, MyArray2
Я хочу dyanimcally перебрать массив, который указан значением sender.value.
3 ответа
Да, это полностью верно.
arrayToUse
будет строка (независимо от значения sender.value
- он будет преобразован в строку), и i
будет повторяться от 0
на длину строки).
Небольшое замечание: это должно быть for (**var** i = 0; …)
, иначе i
будет рассматриваться как глобальная переменная, которая почти наверняка закончится плохо, если у вас будет несколько циклов, запущенных одновременно.
Изменить: вы хотите получить массив на основе имени? В этом случае вы должны искать его в любом контексте, в котором определен массив.
Если это глобальный массив, используйте window
,
Например:
var arrayName = "arr" + sender.value;
var array = window[arrayName];
…
Что вам нужно сделать, это получить доступ к переменной с именем "arr" + sender.value. Доступ к переменной, содержимое которой равно "arr + sender.value, не делает то, что вы хотите - это просто строка.
Чтобы получить доступ к переменной с этим именем, вы можете просмотреть ее как глобальную (глобальные переменные являются членами объекта окна в браузере):
window["arr" + sender.value]
Это безопаснее и быстрее, чем использование eval(), потому что он не запускает код в контексте выполнения JavaScript для оценки строки - он просто ищет переменную в объекте окна с этим именем.
Чтобы получить имя переменной, определенной переменной, вам нужно использовать eval
, вот так:
var arrayToUse = eval("arr" + sender.value);
Тем не менее, вы должны быть очень осторожны с этим, потому что контроль sender.value
позволит кому-то взломать все ваше приложение таким образом. Обычно вы должны попытаться найти другое решение.
Если переменная определена на глобальном уровне, вы можете посмотреть ее как window["arr" + sender.value]
вместо. Это все еще не идеально, но представляет меньшую угрозу безопасности.