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

时间:2009-12-17 10:43:18

标签: javascript

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

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

我的意思是通过以下代码访问此var:

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

6 个答案:

答案 0 :(得分:97)

你想做这样的事吗?

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

答案 1 :(得分:34)

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

this['className'] = 123;

this['varName'] = 123;

名称间距如下所示:

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

答案 2 :(得分:11)

<script>
    var someVarName_10 = 20;
    var num = 10;
    alert(eval('someVar' + 'Name_' + num)); //alert 20
</script>

答案 3 :(得分: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

答案 4 :(得分:0)

这不是我自己的答案,它是Arthur Araújo's answer,但我认为这是无关紧要的。


替代方法:

════════ Exception caught by rendering library ════════════
RenderBox was not laid out: _RenderListTile#0cd79 relayoutBoundary=up20 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
'package:flutter/src/rendering/box.dart':
Failed assertion: line 1694 pos 12: 'hasSize'
The relevant error-causing widget was
    RadioListTile<String> 

答案 5 :(得分:-6)

如果这就是你说的话:

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

它的工作原理是因为脚本最终可用于文档,您可以访问它们的变量。