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


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

我想通过变量名从另一个脚本访问此变量。使用窗口对象很简单,可以使用局部变量吗?

我的意思是通过如下代码访问此变量:

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

1
您的示例显示了一个全局变量。您想知道是否可以从本地范围访问它吗?

这真的取决于你所说的“局部范围”的.. Javascript函数的作用域只有功能,没有块甚至文件
ķ总理

Answers:


110

你想做这样的事情吗?

<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>

抱歉,我错了,我以为vars不在窗口中,谢谢
appqui-platform

8
我不在乎什么OP真正想要的。我关心问题标题,因此在我的搜索中成为google结果。
托马什Zato -恢复莫妮卡

如果变量是object,而我想要内部对象怎么办?例如var a = {name: "ABC"}。在这里window["a.name"]行不通。任何解决方法?
Deepak Chaudhary

1
@DeepakChaudhary,可能您想要类似lodash的_.get吗?- lodash.com/docs#get
YOU

2
那将是window [“ a”]。name;
回购

44

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

this['className'] = 123;

要么

this['varName'] = 123;

名称空间如下所示:

vars = {};
vars['varName'] = 123;
vars.varName // 123

1
var this['className'] = 123;对我来说似乎是语法错误。
菲利克斯·克林

1
这比公认的答案更好。关于此功能在类范围内的工作方式的更多描述。
Sellorio


1

好吧,出于调试目的,您可以执行以下操作。我在类的开发过程中使用它,其中某些变量必须保持私有(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


-7

如果这是您说的话:

<script type="text/javascript">
var hello = 'test';
</script>
<script type="text/javascript">
  alert (hello);
</script>

之所以有效,是因为脚本最终可用于文档,并且您可以访问其var。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.