在JavaScript中使用dynamicvariables名称

在PHP中,你可以做这样的惊人的/可怕的事情:

$a = 1; $b = 2; $c = 3; $name = 'a'; echo $$name; // prints 1 

有什么办法做这样的事情与Javascript?

例如,如果我有一个var name = 'the name of the variable'; 我可以得到一个名称为variables的引用吗?

由于ECMA- / Javascript全部是关于ObjectsContexts (它们也是对象的一些对象),所以每个variables都存储在一个叫做“ variables” (或者在函数, 激活对象的情况下)中。

所以如果你创build这样的variables:

 var a = 1, b = 2, c = 3; 

全局范围 (= NO函数上下文)中,您隐式地将这些variables写入Global对象 (=浏览器中的window )。

这些可以通过使用“点”或“括号”符号访问:

 var name = window.a; 

要么

 var name = window['a']; 

这只适用于这个特定实例中的全局对象,因为全局对象variables 对象window对象本身。 在函数的上下文中,您不能直接访问激活对象 。 例如:

 function foobar() { this.a = 1; this.b = 2; var name = window['a']; // === undefined alert(name); name = this['a']; // === 1 alert(name); } new foobar(); 

new创build一个自定义对象(上下文)的新实例。 没有new的function的范围也将是global (=窗口)。 这个例子会分别提醒undefined1 。 如果我们将取代this.a = 1; this.b = 2 this.a = 1; this.b = 2与:

 var a = 1, b = 2; 

两个警报输出都是未定义的。 在这种情况下,variablesab将被存储在foobar的激活对象中,这是我们无法访问的(当然,我们可以直接通过调用ab来访问它们)。

eval是一个选项。

 var a = 1; var name = 'a'; document.write(eval(name)); // 1 

你可以使用窗口对象来获取它。

window['myVar']

窗口引用了您正在使用的所有全局variables和全局函数。

 a = 'varname'; str = a+' = '+'123'; eval(str) alert(varname); 

尝试这个…

只是不知道一个坏的答案得到这么多票。 这个答案很简单,但是你把它弄得很复杂。

 // If you want to get article_count // var article_count = 1000; var type = 'article'; this[type+'_count'] = 1000; // in a function we use "this"; alert(article_count); 

这是一个例子:

 for(var i=0; i<=3; i++) { window['p'+i] = "hello " + i; } alert(p0); // hello 0 alert(p1); // hello 1 alert(p2); // hello 2 alert(p3); // hello 3 

另一个例子 :

 var myVariable = 'coco'; window[myVariable] = 'riko'; alert(coco); // display : riko 

所以, myVariable的值“ coco ”变成了一个可变的coco

因为全局范围内的所有variables都是Window对象的属性。

在Javascript中,您可以使用所有属性都是关键值对的事实。 杰迪已经提到过这个,但是我不认为他的答案显示了如何被利用。

通常你不是试图创build一个variables来保存一个variables名,而是试图产生variables名,然后使用它们。 PHP使用$$var表示法来实现,但是Javascript并不需要,因为属性键与数组键是可以互换的。

 var id = "abc"; var mine = {}; mine[id] = 123; console.log(mine.abc); 

给123.通常你想要构造variables这就是为什么有间接,所以你也可以做相反的方式。

 var mine = {}; mine.abc = 123; console.log(mine["a"+"bc"]); 

他们的意思是不,你不能。 没有办法完成它。 所以有可能你可以做这样的事情

 function create(obj, const){ // where obj is an object and const is a variable name function const () {} const.prototype.myProperty = property_value; // .. more prototype return new const(); } 

像在ECMAScript 5中实现的那样具有创buildfunction。

如果你不想使用像window或global(node)这样的全局对象,你可以尝试如下所示:

 var obj = {}; obj['whatever'] = 'There\'s no need to store even more stuff in a global object.'; console.log(obj['whatever']); 

eval()在我的testing中不起作用。 但是,向DOM树添加新的JavaScript代码是可能的。 所以这是一个添加一个新variables的函数:

 function createVariable(varName,varContent) { var scriptStr = "var "+varName+"= \""+varContent+"\"" var node_scriptCode = document.createTextNode( scriptStr ) var node_script = document.createElement("script"); node_script.type = "text/javascript" node_script.appendChild(node_scriptCode); var node_head = document.getElementsByTagName("head")[0] node_head.appendChild(node_script); } createVariable("dynamicVar", "some content") console.log(dynamicVar) 

我需要在飞行中绘制多个FormData,而且对象方式运行良好

 var forms = {} 

然后在我的循环中,无论我需要创build一个我使用的表单数据

 forms["formdata"+counter]=new FormData(); forms["formdata"+counter].append(var_name, var_value); 

迟到总比不到好!

面对同样的问题,我问自己给

 x = 'lo Wor' ; y = 'Hel' + x + 'ld' ; // Hello World 

那就是那个

 x = 'MyTxtBx' ; y = document.getElementById(''+x+'').value ; //Those are two single quotes, not double quotes