Как найти переменную JavaScript по ее названию

Есть ли способ найти переменную JavaScript на странице (получить ее как объект) по ее названию? Имя переменной доступно в виде строковой константы.

Ответ 1

<script>
var a ="test";
alert(a);
alert(window["a"]);
alert(eval("a"));
</script>

Ответ 2

Все объекты JS (какие переменные) доступны в пределах своей области действия как именованные свойства их родительского объекта. Если явный родитель не существует, он неявно является объектом window.

то есть:.

var x = 'abc';
alert(window['x']); //displays 'abc'

и для сложного объекта:

var x = {y:'abc'};
alert(x['y']); //displays 'abc'

и это может быть цепочка:

var x = {y:'abc'};
alert(window['x']['y']); //displays 'abc'

Ответ 3

Если вам нужна переменная, объявленная в глобальном контексте, она привязана к объекту окна. ex: window [ "variableName" ]. Все переменные являются значением хэш-таблицы в пределах их области.

Если вам нужно использовать точечную нотацию, вам нужно будет следовать предложению kennebec, чтобы перемещаться по иерархии объектов. eval() может работать, но это более дорогостоящая операция, чем это возможно.

Ответ 4

Если ваша строка ссылается на "глубокое" свойство глобального, например "Yankee.console.format", вы можете выполнить следующие ссылки:

String.prototype.deref= function(){
    // remove leading and trailing quotes and spaces
    var obj= this.replace(/(^[' "]+|[" ']+$)/g,'');

    var M= obj.match(/(^[\w\$]+(\.[\w\$]+)*)/);
    if(M){
        M= M[1].split('.');
        obj= window[M.shift()];
        while(obj && M.length) obj= obj[M.shift()];
    }   
    return obj || this;
}

Ответ 6

Если это глобальная переменная, вы можете искать ее по имени на глобальном объекте, так как глобальные переменные являются свойствами глобального объекта. В браузерах есть глобальная переменная, которая ссылается на глобальный объект с именем window, поэтому:

var name = "foo";
window.foo = 42;
alert(Number(window[name])); // 42

Но глобальными переменными являются Bad Thing (tm).

Чтобы сделать это без глобалов, используйте свой собственный объект:

var name = "foo";
var obj = {};
obj.foo = 42;
alert(Number(obj[name])); // 42

Оба из них работают, потому что в JavaScript вы можете ссылаться на свойство объекта либо с точечной записью, либо с литералом (obj.foo), либо с заключенными в квадратные скобки нотами и строкой (obj["foo"]), а в последнем случае, строка может быть результатом любого выражения, включая поиск переменных.

Ответ 7

Вы можете использовать eval()