Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/197: Рейтинг темы: голосов - 197, средняя оценка - 4.70
8 / 8 / 1
Регистрация: 12.11.2012
Сообщений: 48
1

Динамическое имя переменной

31.07.2013, 10:32. Показов 39006. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возможно ли обратиться к переменной, имя которой заранее неизвестно?
Ну, например, имеем:
Javascript
1
2
3
var data1
var data2
var data3
Мы знаем, что имя переменной будет начинаться с "data", но цифра, следующая за ней, будет формироваться динамически.

То есть все три переменные уже существуют, но к какой именно будет производиться обращение неизвестно. Как это реализоваться, если это возможно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2013, 10:32
Ответы с готовыми решениями:

Создание переменной, имя которой включает имя другой переменной
Вот пример кода var y = 1; var x = 'p' + y; eval( 'var' + x + '= 123' );к созданной переменной...

Имя переменной составить из значения другой переменной?
друзья, у меня такая задача: надо имя переменной составить из значения другой переменной. ...

Динамическое название переменной
Всем привет. Есть вопрос. Имеется одна переменная, которая приобретает динамическое значение....

Имя переменной
Здравствуйте, подскажите пожалуйста что происходит. Есть код: var img =...

10
9 / 9 / 2
Регистрация: 30.07.2013
Сообщений: 44
31.07.2013, 11:24 2
сделай массив
Javascript
1
2
3
4
var data = Array();
data[1] = "1";
data[2] = "2";
data[3] = "3";
и обращайся по номеру
Javascript
1
data[i]
Добавлено через 1 минуту
Либо смотри в сторону eval() если с массивами нельзя
1
8 / 8 / 1
Регистрация: 12.11.2012
Сообщений: 48
31.07.2013, 11:28  [ТС] 3
Спасибо, попробую.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
01.08.2013, 02:54 4
window ['data' + N], где N - тот самый динамически формирующийся номер
2
8 / 8 / 1
Регистрация: 12.11.2012
Сообщений: 48
01.08.2013, 10:24  [ТС] 5
kalabuni, то есть обращение будет выглядеть так:
Javascript
1
2
3
var data1, data2, data3;
var N = '1';
alert(window['data' + N]);
Я правильно понял?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
01.08.2013, 10:43 6
Цитата Сообщение от bnncraft Посмотреть сообщение
Я правильно понял?
нет, вы неправильно поняли
а именно не поняли того, что я вам не нянька

вы вполне можете самостоятельно запустить в браузере написанный вами код и узнать - работает он или не работает
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,163
Записей в блоге: 24
01.08.2013, 12:12 7
Этот код не рабочий:
Javascript
1
2
3
4
(function() {
  var data1="data1", data2="data2";
  alert(window["data"+1]); // undefined
})();
В подобных случаях лучше подумать о небольших изменениях структуры программы, например, заменить несколько переменных data1, data2, data3 на один массив data или один объект
Javascript
1
2
3
4
5
6
7
8
var data = {
  data1: "data1",
  data2: "data2",
  count: 2,
  anotherdata: null
}
alert(data.data1);
alert(data["data2"]);
Я предпочитаю использовать массивы, они нагляднее. Короче, прислушайтесь к BadAss.
2
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
01.08.2013, 12:23 8
Mysterious Light, разумеется, если переменные будут локальными,
то обращаться к ним как к свойствам объекта window будет нельзя

но откуда вы взяли, что они обязательно будут определяться внутри функции как локальные?
даже если такое желание у топикстартера и было,
ничто не может помешать ему сделать эти переменные глобальными
надо просто убрать дефиницию var внутри функции
и ваш код превратится в рабочий
Javascript
1
2
3
4
5
(function() {
  data1="data1";
  data2="data2";
  alert(window["data"+1]); // НИКАК не undefined, а именно ранее определённое значение data1
})();

Не по теме:

(в скобках напомню золотое правило интернета: если можешь не писать - не пиши)

0
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,163
Записей в блоге: 24
01.08.2013, 12:58 9
Я предположил, что ТС может желать соблюдать глобальную область в чистоте и порядке. Обратное считается дурным тоном. ИМХО, не безосновательно.
Как Вам кажется, что лучше: выводить все неизвестно сколько переменных в window, даже если они используются только внутри одной функции как локальные, или использовать один опрятный массив/объект?

Не по теме:

Да-да, я знаю, что я пытался ответить не на прямой вопрос ТС. Но мне кажется многовероятным, что он просто ещё не понял, что нужен легкий рефакторинг.
И ещё одна вещь: я могу вообще ничего не говорить, по крайней мере на этом форуме. Но не думаю, что это хорошая идея — молчать, когда можно сказать что-то полезное.

0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
01.08.2013, 16:39 10
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Я предположил, что ТС может желать соблюдать глобальную область в чистоте и порядке. Обратное считается дурным тоном. ИМХО, не безосновательно.
согласен, что не стоит перегружать объект window дополнительными свойствами без необходимости
но если такая необходимость есть, то почему бы и не использовать?

объект window - он неисчерпаем, как вселенная (или как атом): десяток, сотня или даже пару тысяч глобальных переменных - пустяк для него
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Как Вам кажется, что лучше: выводить все неизвестно сколько переменных в window, даже если они используются только внутри одной функции как локальные, или использовать один опрятный массив/объект?
разумеется, лично я бы использовал в своих построениях индексный массив

но, вполне может быть, что когда-то, в очень редких случаях, "кому-то кое где у нас порой" понадобится и такая "система переменных"
0
8 / 8 / 1
Регистрация: 12.11.2012
Сообщений: 48
02.08.2013, 15:14  [ТС] 11
Mysterious Light, спасибо большое! Идея с объектами сработала на ура
Демо
0
02.08.2013, 15:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2013, 15:14
Помогаю со студенческими работами здесь

Имя переменной
Такой вопрос: есть две переменные: var index1=5; var index2=7; Затем нужно будет...

Загадочное имя переменной «name»
Наткнулся здесь — https://learn.javascript.ru/ifelse. В комментариях под уроком. Почену когда...

Как получить имя переменной?
Для отладки кода появилась необходимость получать имена переменных. Это я могу сделать но только...

Можно ли склеить имя переменной из частей?
Доброго дня. for(var 1 = 1; i <= 10; i++){ var {'name' + i} = i; } Что-то подобное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru