JavaScript, ссылаться на переменную, используя строку, содержащую ее имя?

Есть ли способ сослаться на переменную Javascript со строкой, которая содержит ее имя?

пример:

var myText = 'hello world!';
var someString = 'myText';

//how to output myText value using someString?

7 ответов

Решение

Вы можете использовать eval чтобы сделать это, хотя я стараюсь избегать такого рода вещей любой ценой.

alert(eval(someString));

Лучший способ, если вам понадобится это сделать, - использовать хеш-таблицу.

var stuff = { myText: 'hello world!' };
var someString = 'myText';
alert( stuff[someString] );

Если эта переменная находится в глобальной области видимости, вы можете использовать обозначение в скобках для глобального объекта:

var myText = 'hello world!';
var someString = 'myText';

alert(window[someString]);

Предполагая, что это на верхнем уровне, window[someString] === "hello world!",

В JavaScript нет стандарта для создания "главного объекта" или какого-либо встроенного метода для доступа к переменным в начальной области с помощью знакомой мне строки.

Однако, если вы используете JavaScript для веб-разработки в браузере, window Объект даст вам полный доступ к вашей текущей области. Например:

myVar = "This is my var"; 
if(myVar == window.myVar){
     /*
         This statement would return true
         Because both variables reference
         the same string;
     */
}

Этот метод позволит вам ссылаться на любую переменную области видимости, БЕЗ превращения ее в строку, но вы также можете использовать строку при необходимости с помощью скобки ([]) Селекторы.

window['myVar']

Стоит отметить, что хранение данных в качестве переменной непосредственно в текущей области действия оставляет их открытыми для повторного определения другими запущенными сценариями. Ваша переменная может быть перезаписана именами аргументов функции, переменными цикла и просто назначением нового значения этой переменной.

Чтобы преодолеть это, я предлагаю использовать объект для хранения всех соответствующих данных для вашего приложения (статические и / или ООП). Как это:

$myApp = {
     var1 : 'This is Var1',
     apply : function(){
          alert('Started!');
     }
}

//Referencing relative variables
alert($myApp.var1);
eval("alert(" + someString + ");");

должно сработать.

Вы можете сделать это с eval:

var myText = 'hello world!';
var someString = 'myText';

eval('var theTextInMyText = ' + someString + ';');

alert(theTextInMyText);

Желание сделать это вообще обычно является "кодовым запахом". Возможно, есть более элегантный способ...

eval сделаем это:

var myText = 'hello world!!';
var someString = eval('myText');

document.getElementById('hello').innerHTML = someString;

Как показано здесь.

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