Динамический Javascript - это действительно? - PullRequest
0 голосов
/ 11 июля 2011

Может кто-нибудь сказать мне, если это действительный JavaScript?Я знаю, что вы не можете делать такие вещи в c #, но js - намного более свободный язык ..

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

, в частности - динамическая генерация имени массива ..

update ..

, поэтому у меня есть массив с именем arrMyArray, который инициализируется при готовности документа.sender.value = "MyArray" - но может быть что-то еще, например MyArray2

Я хочу, чтобы dyanimcally итерировать по массиву, который указан значением sender.value.

Ответы [ 3 ]

6 голосов
/ 11 июля 2011

Да, это полностью допустимо.

arrayToUse будет строкой (независимо от значения sender.value - будет преобразовано в строку), а i будет повторяться с 0 к длине строки).

Небольшое примечание: должно быть for (**var** i = 0; …), иначе i будет рассматриваться как глобальная переменная, которая почти наверняка плохо закончится, если у вас есть несколько цикловработает одновременно.

Редактировать : вы хотите получить массив на основе имени?В этом случае вы должны искать его в любом контексте, в котором определен массив.

Если это глобальный массив, используйте window.

Например:

var arrayName = "arr" + sender.value;
var array = window[arrayName];
…
1 голос
/ 11 июля 2011

Что вам нужно сделать, это получить доступ к переменной с name"arr" + sender.value.Доступ к переменной с содержимым"arr + sender.value не делает то, что вы хотите - это просто строка.

Чтобы получить доступ к переменной с этим именем, вы можете посмотреть еекак глобальный (глобальные переменные являются членами объекта окна в браузере):

window["arr" + sender.value]

Это безопаснее и быстрее, чем использование eval (), потому что он не запускает код в контексте выполнения JavaScript для оценкистрока - она ​​просто ищет переменную в объекте окна с таким именем.

1 голос
/ 11 июля 2011

Чтобы получить имя переменной, определенной переменной, вам нужно использовать eval, например так:

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

Однако вы должны быть очень осторожны с этим, потому что управление sender.value позволиткто-то, чтобы похитить все ваше приложение таким образом.Обычно вы должны попытаться найти другое решение.

Если переменная определена на глобальном уровне, вы можете вместо этого искать ее как window["arr" + sender.value].Это все еще не идеально, но представляет меньшую угрозу безопасности.

...