Динамический 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] вместо. Это все еще не идеально, но представляет меньшую угрозу безопасности.

Другие вопросы по тегам