Я знаю, что в PHP возможно иметь «переменные» переменные. Например
$x = "variable";
$$x = "hello, world!";
echo $variable; // displays "hello, world!"
Можно ли ссылаться на переменную по ее имени в виде строки в javascript? Как бы это сделать?
javascript
variables
variable-variables
Шнурки для обуви1291
источник
источник
Ответы:
Единого решения для этого нет (ну, есть
eval
, но не будем это всерьез рассматривать). Можно получить доступ к некоторым глобальным переменным динамическиwindow
, но это не работает для переменных, локальных для функции. Глобальные переменные, которые не становятся свойством, -window
это переменные, определенные с помощьюlet
иconst
, иclass
es.Почти всегда есть лучшее решение, чем использование переменных переменных! Вместо этого вам следует смотреть на структуры данных и выбирать подходящую для вашей проблемы.
Если у вас есть фиксированный набор имен, например
сохранить эти имена / значения как свойства объекта и использовать скобки для их динамического поиска:
В ES2015 + это еще проще сделать для существующих переменных, используя краткую запись свойств :
Если у вас есть переменные с "последовательной" нумерацией, например
тогда вы должны использовать вместо этого массив и просто использовать индекс для доступа к соответствующему значению:
источник
Если вы отчаянно пытаетесь это сделать, вы можете попробовать использовать eval ():
Или используя объект окна:
http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript
источник
eval
не может создавать локальные переменные в строгом режиме. Однако косвенный вызов может создавать глобальные переменные.В отличие от PHP, JavaScript не предлагает доступа к массиву глобальных переменных (который содержит ссылки на все объявленные в настоящее время имена переменных). Таким образом, JavaScript не предлагает встроенной поддержки переменных переменных. Однако вы можете эмулировать эту функцию, если вы определяете все свои переменные как часть массива или объекта. Это, в свою очередь, создаст для вас массив gloabls. Например, вместо объявления переменной
hello
в глобальной области видимости следующим образом:давайте инкапсулируем его внутри объекта. Мы назовем этот объект vv (переменные переменные):
Теперь мы можем ссылаться на переменную по ее индексу, а поскольку индексы массива могут быть предоставлены с использованием переменной, мы де-факто используем переменную переменную:
Ответ на ваш вопрос
Давайте применим это к коду, который вы указали в исходном вопросе:
Практическое использование
Хотя предыдущий код может показаться смехотворно громоздким и непрактичным, существуют практические применения переменных переменных в JavaScript с использованием этого типа инкапсуляции. В приведенном ниже примере мы используем ту же концепцию для получения идентификатора неопределенного количества элементов HTML.
В этом примере объявляются переменные переменные (ключи in
elementIds
) на основе идентификатора каждого элемента и назначается узел указанного элемента как значение каждой переменной. А поскольку использование глобальных переменных в JavaScript обычно не рекомендуется, придание вашим переменным переменных уникальной области видимости (в данном случае объявление их внутриelementIds
массива) не только аккуратно, но и более ответственно.источник
Чтобы ссылаться на переменную в javascript только с помощью строки, вы можете использовать
Вы можете устанавливать и ссылаться на переменные, а также на объекты в переменных.
источник
источник
Конечно можно, но не надо. Переменные должны быть глобальными.
источник
Вы можете использовать
eval(str)
функцию JavaScript .Эта функция преобразует предоставленную строку в код JS, а затем выполняет ее.
Например:
Итак, чтобы использовать его как переменную, вы можете сделать следующее:
Это даст тот же результат, что и:
(Пример взят из руководства PHP по переменным переменным .)
источник