如何通过名称查找JavaScript变量

时间:2009-04-07 09:43:47

标签: javascript

有没有办法在页面上找到JavaScript变量(将其作为对象)?变量名称可用作字符串常量。

7 个答案:

答案 0 :(得分:32)

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

答案 1 :(得分:27)

所有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'

答案 2 :(得分:5)

如果您想要在全局上下文中声明的变量,它将附加到窗口对象。例如:window [“variableName”]。所有变量都是其范围内的哈希表值。

如果你必须使用点分表示法,那么你将需要遵循kennebec的建议,浏览对象层次结构。 eval()也可以工作,但是操作比可能需要的更昂贵。

答案 3 :(得分:4)

如果你的字符串引用了全局的'deep'属性,比如'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;
}

答案 4 :(得分:3)

var getVar = function (obj) {
    for(var key in this) {
        if(obj === this[key]) return key;
    }
};

foo = 'foo';

console.log( getVar(foo) ); // => 'foo'

https://stackoverflow.com/a/17432007/1250044

答案 5 :(得分:2)

如果它是全局变量,您可以在全局对象上按名称查找它,因为全局变量是全局对象的属性。在浏览器上,有一个全局变量引用名为window的全局对象,所以:

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

但全局变量是一件坏事(tm)

要在没有全局变量的情况下执行此操作,请使用您自己的对象:

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

上述两种方法都有效,因为在JavaScript中,您可以使用点表示法和文字(obj.foo)或带括号的表示法和字符串(obj["foo"])来引用对象属性,以及在后一种情况下,字符串可以是任何表达式的结果,包括变量查找。

答案 6 :(得分:0)

您可以使用eval()