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
:
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;
Как показано здесь.