在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全部是关于Objects
和Contexts
(它们也是对象的一些对象),所以每个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
(=窗口)。 这个例子会分别提醒undefined
和1
。 如果我们将取代this.a = 1; this.b = 2
this.a = 1; this.b = 2
与:
var a = 1, b = 2;
两个警报输出都是未定义的。 在这种情况下,variablesa
和b
将被存储在foobar
的激活对象中,这是我们无法访问的(当然,我们可以直接通过调用a
和b
来访问它们)。
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