如何通过名称查找JavaScriptvariables

有没有办法find页面上的JavaScriptvariables(把它作为一个对象)的名字? variables名称可用作string常量。

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

所有的JS对象(哪些variables)在它们的范围内都可用作其父对象的命名属性。 在不存在明确的父节点的情况下,它隐含地是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' 

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

如果你必须使用虚线符号,那么你会想遵循肯尼贝克的build议,浏览对象层次结构。 eval()也可以工作,但是可能比所需的操作更昂贵。

如果你的string引用了一个全局的'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; } 
 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

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

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

但全局variables是一件坏事(tm)

要做到这一点没有全局,使用你自己的对象:

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

上述两种工作都是因为在JavaScript中,你可以用点符号和文字( obj.foo )来引用一个对象属性,也可以用括起来的符号和一个string( obj["foo"] )来引用对象属性,在后一种情况下,该string可以是任何expression式的结果,包括variables查找。

你可以使用eval()