在 JavaScript 中通过名称字符串动态获取全局变量

IT技术 javascript
2021-01-14 12:32:28
<script>
//in one script
var someVarName_10 = 20;
</script>

我想通过变量名从另一个脚本访问这个变量。使用 window 对象很简单,是否可以使用局部变量?

我的意思是通过这样的代码访问这个 var:

<script>
  alert(all_vars['someVar' + 'Name' + num]);
</script>
6个回答

你想做这样的事情吗?

<script>
//in one script
var someVarName_10 = 20;

alert(window["someVarName_10"]); //alert 20

</script>

更新:因为 OP 编辑​​了问题。

<script>
  num=10;
  alert(window['someVar' + 'Name_' + num]); //alert 20
</script>
我不在乎 OP真正想要什么我关心有问题的标题,因此在我的搜索中成为谷歌结果。
2021-03-18 12:32:28
@DeepakChaudhary,您可能想要 lodash 的 _.get 之类的东西吗?- lodash.com/docs#get
2021-03-29 12:32:28
那将是 window["a"].name;
2021-03-30 12:32:28
如果变量是对象,而我想要内部对象怎么办?例如var a = {name: "ABC"}在这里是window["a.name"]行不通的。任何解决方法?
2021-04-04 12:32:28
抱歉,我错了,我以为 var 不在窗口中,谢谢
2021-04-08 12:32:28

我注意到每个人都在建议创建全局变量,这将导致变量泄漏到全局命名空间。当您动态创建类名或仅创建变量时,很容易将 em 保持在本地:

this['className'] = 123;

或者

this['varName'] = 123;

名称间距看起来像这样:

vars = {};
vars['varName'] = 123;
vars.varName // 123
这比接受的答案要好。有关此功能如何在类范围内工作的更多描述。
2021-03-19 12:32:28
<script>
    var someVarName_10 = 20;
    var num = 10;
    alert(eval('someVar' + 'Name_' + num)); //alert 20
</script>
eval对我来说效果更好!但请谨慎使用
2021-04-03 12:32:28

好吧,出于调试目的,您可以执行以下操作。我在类的开发过程中使用它,其中一些变量必须保持私有(var)。即使在局部变量(和全局变量)中也能正常工作

function MYCLASS(){
    var a=1, b=2, c=3;
    this.public = "variable";
    this.debug = function(sVar){
        return eval(sVar);
    }
}

var myThing = new MYCLASS();
myThing.debug('a') //return 1
myThing.debug('b') //return 2
myThing.debug('c') //return 3

这不是我自己的答案,而是Arthur Araújo 的答案,但我认为它在这里很重要。


评估替代:

exp = '1 + 1'
x = Function('return ' + exp)()
console.log(x)