2009-12-17 76 views
54
<script> 
//in one script 
var someVarName_10 = 20; 
</script> 

我想通過變量的名稱從另一個腳本訪問此變量。用window對象很簡單,用局部變量可能嗎?通過JavaScript中的名稱字符串動態獲取全局變量

我的意思是這樣的代碼訪問該變種:

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

您的示例顯示了一個全局變量。你想知道你是否可以從本地範圍訪問它? – 2009-12-17 10:46:58

+0

這真的取決於你的意思是'本地範圍'.. JavaScript的功能只限於功能,而不是塊或甚至文件 – 2009-12-17 10:50:40

+0

可能的重複[有沒有一種方法來訪問一個JavaScript變量使用字符串包含的名稱變量?](http://stackoverflow.com/questions/1441532/is-there-a-way-to-access-a-javascript-variable-using-a-string-that-c​​ontains-the-n) – Gilles 2011-05-29 20:56:54

回答

81

你想做這樣的事嗎?

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

對不起,我錯了,我認爲增值稅不在窗口,謝謝 – 2009-12-17 10:59:43

+0

不客氣。 – YOU 2009-12-17 11:00:46

+4

我不在乎OP *實際*想要什麼。我關心什麼是問題標題,因此成爲我的搜索谷歌結果。 – 2015-10-22 08:15:32

-5

如果這是你說的話:

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

它的工作原理,因爲腳本是最後提供給文檔,你可以訪問他們的瓦爾。

30

我注意到,每個人都建議全局var創建這將導致變量泄漏到全局名稱空間。 當你動態創建的類名或只是變量很容易讓EM地方:

this['className'] = 123; 

this['varName'] = 123; 

名稱間距應該是這樣的:

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

'var this ['className'] = 123;'對我來說看起來像是一個語法錯誤。 – 2013-01-19 01:33:25

+0

你對我不知道爲什麼我加了var – 2013-04-07 19:54:42

+1

這比接受的答案要好。有關此功能如何在類作用域中工作的更多描述。 – 2015-06-22 01:54:01

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

'eval'對我來說效果更好!但謹慎使用它 – papaiatis 2016-11-09 13:14:43

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